workos 0.19.0 → 0.20.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/README.md +4 -646
- package/bin/workos.js +44 -0
- package/package.json +18 -99
- package/LICENSE +0 -47
- package/dist/bin.d.ts +0 -2
- package/dist/bin.js +0 -1790
- package/dist/bin.js.map +0 -1
- package/dist/cli.config.d.ts +0 -88
- package/dist/cli.config.js +0 -110
- package/dist/cli.config.js.map +0 -1
- package/dist/commands/api/catalog.d.ts +0 -23
- package/dist/commands/api/catalog.js +0 -97
- package/dist/commands/api/catalog.js.map +0 -1
- package/dist/commands/api/format.d.ts +0 -5
- package/dist/commands/api/format.js +0 -46
- package/dist/commands/api/format.js.map +0 -1
- package/dist/commands/api/index.d.ts +0 -15
- package/dist/commands/api/index.js +0 -213
- package/dist/commands/api/index.js.map +0 -1
- package/dist/commands/api/interactive.d.ts +0 -3
- package/dist/commands/api/interactive.js +0 -133
- package/dist/commands/api/interactive.js.map +0 -1
- package/dist/commands/api/request.d.ts +0 -14
- package/dist/commands/api/request.js +0 -38
- package/dist/commands/api/request.js.map +0 -1
- package/dist/commands/api-key-mgmt.d.ts +0 -16
- package/dist/commands/api-key-mgmt.js +0 -96
- package/dist/commands/api-key-mgmt.js.map +0 -1
- package/dist/commands/audit-log.d.ts +0 -26
- package/dist/commands/audit-log.js +0 -155
- package/dist/commands/audit-log.js.map +0 -1
- package/dist/commands/auth-status.d.ts +0 -1
- package/dist/commands/auth-status.js +0 -57
- package/dist/commands/auth-status.js.map +0 -1
- package/dist/commands/claim.d.ts +0 -11
- package/dist/commands/claim.js +0 -143
- package/dist/commands/claim.js.map +0 -1
- package/dist/commands/config.d.ts +0 -3
- package/dist/commands/config.js +0 -54
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/connection.d.ts +0 -13
- package/dist/commands/connection.js +0 -96
- package/dist/commands/connection.js.map +0 -1
- package/dist/commands/debug-sso.d.ts +0 -1
- package/dist/commands/debug-sso.js +0 -78
- package/dist/commands/debug-sso.js.map +0 -1
- package/dist/commands/debug-sync.d.ts +0 -1
- package/dist/commands/debug-sync.js +0 -102
- package/dist/commands/debug-sync.js.map +0 -1
- package/dist/commands/debug.d.ts +0 -28
- package/dist/commands/debug.js +0 -406
- package/dist/commands/debug.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -22
- package/dist/commands/dev.js +0 -145
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/directory.d.ts +0 -27
- package/dist/commands/directory.js +0 -176
- package/dist/commands/directory.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -12
- package/dist/commands/doctor.js +0 -41
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/emulate.d.ts +0 -7
- package/dist/commands/emulate.js +0 -69
- package/dist/commands/emulate.js.map +0 -1
- package/dist/commands/env.d.ts +0 -19
- package/dist/commands/env.js +0 -303
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/event.d.ts +0 -9
- package/dist/commands/event.js +0 -43
- package/dist/commands/event.js.map +0 -1
- package/dist/commands/feature-flag.d.ts +0 -12
- package/dist/commands/feature-flag.js +0 -96
- package/dist/commands/feature-flag.js.map +0 -1
- package/dist/commands/install-skill.d.ts +0 -85
- package/dist/commands/install-skill.js +0 -332
- package/dist/commands/install-skill.js.map +0 -1
- package/dist/commands/install.d.ts +0 -6
- package/dist/commands/install.js +0 -51
- package/dist/commands/install.js.map +0 -1
- package/dist/commands/invitation.d.ts +0 -19
- package/dist/commands/invitation.js +0 -94
- package/dist/commands/invitation.js.map +0 -1
- package/dist/commands/list-skills.d.ts +0 -4
- package/dist/commands/list-skills.js +0 -52
- package/dist/commands/list-skills.js.map +0 -1
- package/dist/commands/login.d.ts +0 -32
- package/dist/commands/login.js +0 -239
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -1
- package/dist/commands/logout.js +0 -17
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/mcp.d.ts +0 -14
- package/dist/commands/mcp.js +0 -99
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/membership.d.ts +0 -20
- package/dist/commands/membership.js +0 -129
- package/dist/commands/membership.js.map +0 -1
- package/dist/commands/migrations.d.ts +0 -2
- package/dist/commands/migrations.js +0 -50
- package/dist/commands/migrations.js.map +0 -1
- package/dist/commands/onboard-user.d.ts +0 -7
- package/dist/commands/onboard-user.js +0 -61
- package/dist/commands/onboard-user.js.map +0 -1
- package/dist/commands/org-domain.d.ts +0 -4
- package/dist/commands/org-domain.js +0 -45
- package/dist/commands/org-domain.js.map +0 -1
- package/dist/commands/organization.d.ts +0 -14
- package/dist/commands/organization.js +0 -103
- package/dist/commands/organization.js.map +0 -1
- package/dist/commands/permission.d.ts +0 -20
- package/dist/commands/permission.js +0 -93
- package/dist/commands/permission.js.map +0 -1
- package/dist/commands/portal.d.ts +0 -7
- package/dist/commands/portal.js +0 -26
- package/dist/commands/portal.js.map +0 -1
- package/dist/commands/role.d.ts +0 -17
- package/dist/commands/role.js +0 -122
- package/dist/commands/role.js.map +0 -1
- package/dist/commands/seed.d.ts +0 -6
- package/dist/commands/seed.js +0 -298
- package/dist/commands/seed.js.map +0 -1
- package/dist/commands/session.d.ts +0 -8
- package/dist/commands/session.js +0 -63
- package/dist/commands/session.js.map +0 -1
- package/dist/commands/setup-org.d.ts +0 -6
- package/dist/commands/setup-org.js +0 -99
- package/dist/commands/setup-org.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -50
- package/dist/commands/setup.js +0 -237
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/telemetry.d.ts +0 -3
- package/dist/commands/telemetry.js +0 -88
- package/dist/commands/telemetry.js.map +0 -1
- package/dist/commands/uninstall-skill.d.ts +0 -11
- package/dist/commands/uninstall-skill.js +0 -117
- package/dist/commands/uninstall-skill.js.map +0 -1
- package/dist/commands/user.d.ts +0 -19
- package/dist/commands/user.js +0 -92
- package/dist/commands/user.js.map +0 -1
- package/dist/commands/vault-run.d.ts +0 -13
- package/dist/commands/vault-run.js +0 -195
- package/dist/commands/vault-run.js.map +0 -1
- package/dist/commands/vault.d.ts +0 -25
- package/dist/commands/vault.js +0 -153
- package/dist/commands/vault.js.map +0 -1
- package/dist/commands/verify-login.d.ts +0 -25
- package/dist/commands/verify-login.js +0 -158
- package/dist/commands/verify-login.js.map +0 -1
- package/dist/commands/webhook.d.ts +0 -3
- package/dist/commands/webhook.js +0 -92
- package/dist/commands/webhook.js.map +0 -1
- package/dist/craft-pre-release.sh +0 -10
- package/dist/dashboard/components/AnimatedLogo.d.ts +0 -8
- package/dist/dashboard/components/AnimatedLogo.js +0 -16
- package/dist/dashboard/components/AnimatedLogo.js.map +0 -1
- package/dist/dashboard/components/CompletionView.d.ts +0 -13
- package/dist/dashboard/components/CompletionView.js +0 -25
- package/dist/dashboard/components/CompletionView.js.map +0 -1
- package/dist/dashboard/components/ConfirmPrompt.d.ts +0 -9
- package/dist/dashboard/components/ConfirmPrompt.js +0 -25
- package/dist/dashboard/components/ConfirmPrompt.js.map +0 -1
- package/dist/dashboard/components/CredentialsForm.d.ts +0 -10
- package/dist/dashboard/components/CredentialsForm.js +0 -47
- package/dist/dashboard/components/CredentialsForm.js.map +0 -1
- package/dist/dashboard/components/Dashboard.d.ts +0 -3
- package/dist/dashboard/components/Dashboard.js +0 -100
- package/dist/dashboard/components/Dashboard.js.map +0 -1
- package/dist/dashboard/components/DashboardLayout.d.ts +0 -24
- package/dist/dashboard/components/DashboardLayout.js +0 -25
- package/dist/dashboard/components/DashboardLayout.js.map +0 -1
- package/dist/dashboard/components/DiffPanel.d.ts +0 -9
- package/dist/dashboard/components/DiffPanel.js +0 -136
- package/dist/dashboard/components/DiffPanel.js.map +0 -1
- package/dist/dashboard/components/InlinePrompt.d.ts +0 -8
- package/dist/dashboard/components/InlinePrompt.js +0 -19
- package/dist/dashboard/components/InlinePrompt.js.map +0 -1
- package/dist/dashboard/components/OutputPanel.d.ts +0 -10
- package/dist/dashboard/components/OutputPanel.js +0 -100
- package/dist/dashboard/components/OutputPanel.js.map +0 -1
- package/dist/dashboard/components/Panel.d.ts +0 -12
- package/dist/dashboard/components/Panel.js +0 -6
- package/dist/dashboard/components/Panel.js.map +0 -1
- package/dist/dashboard/components/TextInput.d.ts +0 -13
- package/dist/dashboard/components/TextInput.js +0 -57
- package/dist/dashboard/components/TextInput.js.map +0 -1
- package/dist/dashboard/components/WelcomeArt.d.ts +0 -2
- package/dist/dashboard/components/WelcomeArt.js +0 -9
- package/dist/dashboard/components/WelcomeArt.js.map +0 -1
- package/dist/dashboard/hooks/useAnimation.d.ts +0 -7
- package/dist/dashboard/hooks/useAnimation.js +0 -24
- package/dist/dashboard/hooks/useAnimation.js.map +0 -1
- package/dist/dashboard/hooks/useKeyboard.d.ts +0 -8
- package/dist/dashboard/hooks/useKeyboard.js +0 -18
- package/dist/dashboard/hooks/useKeyboard.js.map +0 -1
- package/dist/dashboard/hooks/useTerminalSize.d.ts +0 -8
- package/dist/dashboard/hooks/useTerminalSize.js +0 -23
- package/dist/dashboard/hooks/useTerminalSize.js.map +0 -1
- package/dist/dashboard/index.d.ts +0 -6
- package/dist/dashboard/index.js +0 -36
- package/dist/dashboard/index.js.map +0 -1
- package/dist/dashboard/lib/diff-utils.d.ts +0 -21
- package/dist/dashboard/lib/diff-utils.js +0 -271
- package/dist/dashboard/lib/diff-utils.js.map +0 -1
- package/dist/dashboard/lib/logo-frames.d.ts +0 -20
- package/dist/dashboard/lib/logo-frames.js +0 -109
- package/dist/dashboard/lib/logo-frames.js.map +0 -1
- package/dist/dashboard/lib/welcome-art.d.ts +0 -1
- package/dist/dashboard/lib/welcome-art.js +0 -5
- package/dist/dashboard/lib/welcome-art.js.map +0 -1
- package/dist/dashboard/types.d.ts +0 -5
- package/dist/dashboard/types.js +0 -2
- package/dist/dashboard/types.js.map +0 -1
- package/dist/doctor/agent-prompt.d.ts +0 -10
- package/dist/doctor/agent-prompt.js +0 -190
- package/dist/doctor/agent-prompt.js.map +0 -1
- package/dist/doctor/checks/ai-analysis.d.ts +0 -9
- package/dist/doctor/checks/ai-analysis.js +0 -124
- package/dist/doctor/checks/ai-analysis.js.map +0 -1
- package/dist/doctor/checks/auth-patterns.d.ts +0 -2
- package/dist/doctor/checks/auth-patterns.js +0 -569
- package/dist/doctor/checks/auth-patterns.js.map +0 -1
- package/dist/doctor/checks/connectivity.d.ts +0 -2
- package/dist/doctor/checks/connectivity.js +0 -35
- package/dist/doctor/checks/connectivity.js.map +0 -1
- package/dist/doctor/checks/dashboard.d.ts +0 -3
- package/dist/doctor/checks/dashboard.js +0 -123
- package/dist/doctor/checks/dashboard.js.map +0 -1
- package/dist/doctor/checks/environment.d.ts +0 -2
- package/dist/doctor/checks/environment.js +0 -86
- package/dist/doctor/checks/environment.js.map +0 -1
- package/dist/doctor/checks/framework.d.ts +0 -2
- package/dist/doctor/checks/framework.js +0 -94
- package/dist/doctor/checks/framework.js.map +0 -1
- package/dist/doctor/checks/host-execution.d.ts +0 -2
- package/dist/doctor/checks/host-execution.js +0 -21
- package/dist/doctor/checks/host-execution.js.map +0 -1
- package/dist/doctor/checks/language.d.ts +0 -6
- package/dist/doctor/checks/language.js +0 -104
- package/dist/doctor/checks/language.js.map +0 -1
- package/dist/doctor/checks/mcp.d.ts +0 -15
- package/dist/doctor/checks/mcp.js +0 -34
- package/dist/doctor/checks/mcp.js.map +0 -1
- package/dist/doctor/checks/runtime.d.ts +0 -2
- package/dist/doctor/checks/runtime.js +0 -20
- package/dist/doctor/checks/runtime.js.map +0 -1
- package/dist/doctor/checks/sdk.d.ts +0 -2
- package/dist/doctor/checks/sdk.js +0 -192
- package/dist/doctor/checks/sdk.js.map +0 -1
- package/dist/doctor/checks/skills.d.ts +0 -9
- package/dist/doctor/checks/skills.js +0 -84
- package/dist/doctor/checks/skills.js.map +0 -1
- package/dist/doctor/clipboard.d.ts +0 -1
- package/dist/doctor/clipboard.js +0 -43
- package/dist/doctor/clipboard.js.map +0 -1
- package/dist/doctor/index.d.ts +0 -26
- package/dist/doctor/index.js +0 -182
- package/dist/doctor/index.js.map +0 -1
- package/dist/doctor/issues.d.ts +0 -63
- package/dist/doctor/issues.js +0 -199
- package/dist/doctor/issues.js.map +0 -1
- package/dist/doctor/json-output.d.ts +0 -2
- package/dist/doctor/json-output.js +0 -4
- package/dist/doctor/json-output.js.map +0 -1
- package/dist/doctor/output.d.ts +0 -7
- package/dist/doctor/output.js +0 -289
- package/dist/doctor/output.js.map +0 -1
- package/dist/doctor/types.d.ts +0 -203
- package/dist/doctor/types.js +0 -2
- package/dist/doctor/types.js.map +0 -1
- package/dist/integrations/dotnet/index.d.ts +0 -8
- package/dist/integrations/dotnet/index.js +0 -170
- package/dist/integrations/dotnet/index.js.map +0 -1
- package/dist/integrations/elixir/index.d.ts +0 -8
- package/dist/integrations/elixir/index.js +0 -146
- package/dist/integrations/elixir/index.js.map +0 -1
- package/dist/integrations/go/index.d.ts +0 -11
- package/dist/integrations/go/index.js +0 -212
- package/dist/integrations/go/index.js.map +0 -1
- package/dist/integrations/kotlin/index.d.ts +0 -4
- package/dist/integrations/kotlin/index.js +0 -78
- package/dist/integrations/kotlin/index.js.map +0 -1
- package/dist/integrations/nextjs/index.d.ts +0 -4
- package/dist/integrations/nextjs/index.js +0 -93
- package/dist/integrations/nextjs/index.js.map +0 -1
- package/dist/integrations/nextjs/utils.d.ts +0 -8
- package/dist/integrations/nextjs/utils.js +0 -68
- package/dist/integrations/nextjs/utils.js.map +0 -1
- package/dist/integrations/node/index.d.ts +0 -4
- package/dist/integrations/node/index.js +0 -52
- package/dist/integrations/node/index.js.map +0 -1
- package/dist/integrations/php/index.d.ts +0 -4
- package/dist/integrations/php/index.js +0 -51
- package/dist/integrations/php/index.js.map +0 -1
- package/dist/integrations/php-laravel/index.d.ts +0 -4
- package/dist/integrations/php-laravel/index.js +0 -51
- package/dist/integrations/php-laravel/index.js.map +0 -1
- package/dist/integrations/python/index.d.ts +0 -9
- package/dist/integrations/python/index.js +0 -249
- package/dist/integrations/python/index.js.map +0 -1
- package/dist/integrations/react/index.d.ts +0 -4
- package/dist/integrations/react/index.js +0 -49
- package/dist/integrations/react/index.js.map +0 -1
- package/dist/integrations/react-router/index.d.ts +0 -4
- package/dist/integrations/react-router/index.js +0 -94
- package/dist/integrations/react-router/index.js.map +0 -1
- package/dist/integrations/react-router/utils.d.ts +0 -10
- package/dist/integrations/react-router/utils.js +0 -162
- package/dist/integrations/react-router/utils.js.map +0 -1
- package/dist/integrations/ruby/index.d.ts +0 -8
- package/dist/integrations/ruby/index.js +0 -137
- package/dist/integrations/ruby/index.js.map +0 -1
- package/dist/integrations/sveltekit/index.d.ts +0 -4
- package/dist/integrations/sveltekit/index.js +0 -50
- package/dist/integrations/sveltekit/index.js.map +0 -1
- package/dist/integrations/tanstack-start/index.d.ts +0 -4
- package/dist/integrations/tanstack-start/index.js +0 -51
- package/dist/integrations/tanstack-start/index.js.map +0 -1
- package/dist/integrations/vanilla-js/index.d.ts +0 -4
- package/dist/integrations/vanilla-js/index.js +0 -49
- package/dist/integrations/vanilla-js/index.js.map +0 -1
- package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.d.ts +0 -7
- package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js +0 -12
- package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js.map +0 -1
- package/dist/lib/adapters/cli-adapter.d.ts +0 -113
- package/dist/lib/adapters/cli-adapter.js +0 -641
- package/dist/lib/adapters/cli-adapter.js.map +0 -1
- package/dist/lib/adapters/dashboard-adapter.d.ts +0 -34
- package/dist/lib/adapters/dashboard-adapter.js +0 -121
- package/dist/lib/adapters/dashboard-adapter.js.map +0 -1
- package/dist/lib/adapters/headless-adapter.d.ts +0 -80
- package/dist/lib/adapters/headless-adapter.js +0 -347
- package/dist/lib/adapters/headless-adapter.js.map +0 -1
- package/dist/lib/adapters/index.d.ts +0 -4
- package/dist/lib/adapters/index.js +0 -4
- package/dist/lib/adapters/index.js.map +0 -1
- package/dist/lib/adapters/types.d.ts +0 -41
- package/dist/lib/adapters/types.js +0 -2
- package/dist/lib/adapters/types.js.map +0 -1
- package/dist/lib/agent-interface.d.ts +0 -84
- package/dist/lib/agent-interface.js +0 -840
- package/dist/lib/agent-interface.js.map +0 -1
- package/dist/lib/agent-runner.d.ts +0 -9
- package/dist/lib/agent-runner.js +0 -261
- package/dist/lib/agent-runner.js.map +0 -1
- package/dist/lib/ai-content.d.ts +0 -14
- package/dist/lib/ai-content.js +0 -131
- package/dist/lib/ai-content.js.map +0 -1
- package/dist/lib/api-error-handler.d.ts +0 -18
- package/dist/lib/api-error-handler.js +0 -76
- package/dist/lib/api-error-handler.js.map +0 -1
- package/dist/lib/api-key.d.ts +0 -14
- package/dist/lib/api-key.js +0 -37
- package/dist/lib/api-key.js.map +0 -1
- package/dist/lib/api.d.ts +0 -25
- package/dist/lib/api.js +0 -120
- package/dist/lib/api.js.map +0 -1
- package/dist/lib/background-refresh.d.ts +0 -29
- package/dist/lib/background-refresh.js +0 -95
- package/dist/lib/background-refresh.js.map +0 -1
- package/dist/lib/command-aliases.d.ts +0 -8
- package/dist/lib/command-aliases.js +0 -12
- package/dist/lib/command-aliases.js.map +0 -1
- package/dist/lib/completion-data.d.ts +0 -33
- package/dist/lib/completion-data.js +0 -33
- package/dist/lib/completion-data.js.map +0 -1
- package/dist/lib/config-store.d.ts +0 -63
- package/dist/lib/config-store.js +0 -293
- package/dist/lib/config-store.js.map +0 -1
- package/dist/lib/config.d.ts +0 -34
- package/dist/lib/config.js +0 -37
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/constants.d.ts +0 -51
- package/dist/lib/constants.js +0 -50
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/credential-discovery.d.ts +0 -42
- package/dist/lib/credential-discovery.js +0 -100
- package/dist/lib/credential-discovery.js.map +0 -1
- package/dist/lib/credential-proxy.d.ts +0 -45
- package/dist/lib/credential-proxy.js +0 -364
- package/dist/lib/credential-proxy.js.map +0 -1
- package/dist/lib/credential-store.d.ts +0 -32
- package/dist/lib/credential-store.js +0 -236
- package/dist/lib/credential-store.js.map +0 -1
- package/dist/lib/credentials.d.ts +0 -13
- package/dist/lib/credentials.js +0 -34
- package/dist/lib/credentials.js.map +0 -1
- package/dist/lib/dev-command.d.ts +0 -26
- package/dist/lib/dev-command.js +0 -129
- package/dist/lib/dev-command.js.map +0 -1
- package/dist/lib/device-auth.d.ts +0 -48
- package/dist/lib/device-auth.js +0 -176
- package/dist/lib/device-auth.js.map +0 -1
- package/dist/lib/device-id.d.ts +0 -25
- package/dist/lib/device-id.js +0 -102
- package/dist/lib/device-id.js.map +0 -1
- package/dist/lib/ensure-auth.d.ts +0 -12
- package/dist/lib/ensure-auth.js +0 -111
- package/dist/lib/ensure-auth.js.map +0 -1
- package/dist/lib/env-writer.d.ts +0 -25
- package/dist/lib/env-writer.js +0 -90
- package/dist/lib/env-writer.js.map +0 -1
- package/dist/lib/events.d.ts +0 -248
- package/dist/lib/events.js +0 -19
- package/dist/lib/events.js.map +0 -1
- package/dist/lib/framework-config.d.ts +0 -133
- package/dist/lib/framework-config.js +0 -11
- package/dist/lib/framework-config.js.map +0 -1
- package/dist/lib/helper-functions.d.ts +0 -1
- package/dist/lib/helper-functions.js +0 -2
- package/dist/lib/helper-functions.js.map +0 -1
- package/dist/lib/host-probe.d.ts +0 -28
- package/dist/lib/host-probe.js +0 -154
- package/dist/lib/host-probe.js.map +0 -1
- package/dist/lib/installer-core.d.ts +0 -569
- package/dist/lib/installer-core.js +0 -1134
- package/dist/lib/installer-core.js.map +0 -1
- package/dist/lib/installer-core.types.d.ts +0 -162
- package/dist/lib/installer-core.types.js +0 -2
- package/dist/lib/installer-core.types.js.map +0 -1
- package/dist/lib/mcp-clients.d.ts +0 -45
- package/dist/lib/mcp-clients.js +0 -297
- package/dist/lib/mcp-clients.js.map +0 -1
- package/dist/lib/port-detection.d.ts +0 -7
- package/dist/lib/port-detection.js +0 -244
- package/dist/lib/port-detection.js.map +0 -1
- package/dist/lib/post-install.d.ts +0 -8
- package/dist/lib/post-install.js +0 -51
- package/dist/lib/post-install.js.map +0 -1
- package/dist/lib/preferences.d.ts +0 -143
- package/dist/lib/preferences.js +0 -227
- package/dist/lib/preferences.js.map +0 -1
- package/dist/lib/progress-tracker.d.ts +0 -22
- package/dist/lib/progress-tracker.js +0 -47
- package/dist/lib/progress-tracker.js.map +0 -1
- package/dist/lib/registry.d.ts +0 -42
- package/dist/lib/registry.js +0 -96
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/resolve-install-credentials.d.ts +0 -11
- package/dist/lib/resolve-install-credentials.js +0 -53
- package/dist/lib/resolve-install-credentials.js.map +0 -1
- package/dist/lib/run-with-core.d.ts +0 -7
- package/dist/lib/run-with-core.js +0 -559
- package/dist/lib/run-with-core.js.map +0 -1
- package/dist/lib/safe-tools.d.ts +0 -2
- package/dist/lib/safe-tools.js +0 -212
- package/dist/lib/safe-tools.js.map +0 -1
- package/dist/lib/scaffold/index.d.ts +0 -1
- package/dist/lib/scaffold/index.js +0 -2
- package/dist/lib/scaffold/index.js.map +0 -1
- package/dist/lib/scaffold/scaffold.d.ts +0 -66
- package/dist/lib/scaffold/scaffold.js +0 -156
- package/dist/lib/scaffold/scaffold.js.map +0 -1
- package/dist/lib/settings.d.ts +0 -60
- package/dist/lib/settings.js +0 -31
- package/dist/lib/settings.js.map +0 -1
- package/dist/lib/staging-api.d.ts +0 -22
- package/dist/lib/staging-api.js +0 -74
- package/dist/lib/staging-api.js.map +0 -1
- package/dist/lib/startup-notice-gate.d.ts +0 -21
- package/dist/lib/startup-notice-gate.js +0 -29
- package/dist/lib/startup-notice-gate.js.map +0 -1
- package/dist/lib/telemetry-notice.d.ts +0 -25
- package/dist/lib/telemetry-notice.js +0 -58
- package/dist/lib/telemetry-notice.js.map +0 -1
- package/dist/lib/token-refresh-client.d.ts +0 -23
- package/dist/lib/token-refresh-client.js +0 -89
- package/dist/lib/token-refresh-client.js.map +0 -1
- package/dist/lib/token-refresh.d.ts +0 -12
- package/dist/lib/token-refresh.js +0 -27
- package/dist/lib/token-refresh.js.map +0 -1
- package/dist/lib/unclaimed-env-api.d.ts +0 -42
- package/dist/lib/unclaimed-env-api.js +0 -139
- package/dist/lib/unclaimed-env-api.js.map +0 -1
- package/dist/lib/unclaimed-env-provision.d.ts +0 -24
- package/dist/lib/unclaimed-env-provision.js +0 -80
- package/dist/lib/unclaimed-env-provision.js.map +0 -1
- package/dist/lib/unclaimed-warning.d.ts +0 -15
- package/dist/lib/unclaimed-warning.js +0 -78
- package/dist/lib/unclaimed-warning.js.map +0 -1
- package/dist/lib/validation/build-validator.d.ts +0 -21
- package/dist/lib/validation/build-validator.js +0 -153
- package/dist/lib/validation/build-validator.js.map +0 -1
- package/dist/lib/validation/index.d.ts +0 -4
- package/dist/lib/validation/index.js +0 -4
- package/dist/lib/validation/index.js.map +0 -1
- package/dist/lib/validation/quick-checks.d.ts +0 -19
- package/dist/lib/validation/quick-checks.js +0 -192
- package/dist/lib/validation/quick-checks.js.map +0 -1
- package/dist/lib/validation/security-checks.d.ts +0 -35
- package/dist/lib/validation/security-checks.js +0 -106
- package/dist/lib/validation/security-checks.js.map +0 -1
- package/dist/lib/validation/types.d.ts +0 -56
- package/dist/lib/validation/types.js +0 -2
- package/dist/lib/validation/types.js.map +0 -1
- package/dist/lib/validation/validator.d.ts +0 -13
- package/dist/lib/validation/validator.js +0 -711
- package/dist/lib/validation/validator.js.map +0 -1
- package/dist/lib/version-check.d.ts +0 -6
- package/dist/lib/version-check.js +0 -46
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/workos-api.d.ts +0 -30
- package/dist/lib/workos-api.js +0 -69
- package/dist/lib/workos-api.js.map +0 -1
- package/dist/lib/workos-client.d.ts +0 -58
- package/dist/lib/workos-client.js +0 -140
- package/dist/lib/workos-client.js.map +0 -1
- package/dist/lib/workos-management.d.ts +0 -32
- package/dist/lib/workos-management.js +0 -149
- package/dist/lib/workos-management.js.map +0 -1
- package/dist/nextjs/nextjs-installer-agent.d.ts +0 -5
- package/dist/nextjs/nextjs-installer-agent.js +0 -6
- package/dist/nextjs/nextjs-installer-agent.js.map +0 -1
- package/dist/nextjs/utils.d.ts +0 -4
- package/dist/nextjs/utils.js +0 -5
- package/dist/nextjs/utils.js.map +0 -1
- package/dist/react/react-installer-agent.d.ts +0 -4
- package/dist/react/react-installer-agent.js +0 -5
- package/dist/react/react-installer-agent.js.map +0 -1
- package/dist/react-router/react-router-installer-agent.d.ts +0 -4
- package/dist/react-router/react-router-installer-agent.js +0 -5
- package/dist/react-router/react-router-installer-agent.js.map +0 -1
- package/dist/react-router/utils.d.ts +0 -4
- package/dist/react-router/utils.js +0 -5
- package/dist/react-router/utils.js.map +0 -1
- package/dist/run.d.ts +0 -33
- package/dist/run.js +0 -58
- package/dist/run.js.map +0 -1
- package/dist/smoke-test.ts +0 -881
- package/dist/steps/add-or-update-environment-variables.d.ts +0 -10
- package/dist/steps/add-or-update-environment-variables.js +0 -155
- package/dist/steps/add-or-update-environment-variables.js.map +0 -1
- package/dist/steps/index.d.ts +0 -3
- package/dist/steps/index.js +0 -4
- package/dist/steps/index.js.map +0 -1
- package/dist/steps/run-prettier.d.ts +0 -5
- package/dist/steps/run-prettier.js +0 -50
- package/dist/steps/run-prettier.js.map +0 -1
- package/dist/steps/upload-environment-variables/EnvironmentProvider.d.ts +0 -8
- package/dist/steps/upload-environment-variables/EnvironmentProvider.js +0 -7
- package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
- package/dist/steps/upload-environment-variables/index.d.ts +0 -6
- package/dist/steps/upload-environment-variables/index.js +0 -69
- package/dist/steps/upload-environment-variables/index.js.map +0 -1
- package/dist/steps/upload-environment-variables/providers/vercel.d.ts +0 -14
- package/dist/steps/upload-environment-variables/providers/vercel.js +0 -107
- package/dist/steps/upload-environment-variables/providers/vercel.js.map +0 -1
- package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +0 -4
- package/dist/tanstack-start/tanstack-start-installer-agent.js +0 -5
- package/dist/tanstack-start/tanstack-start-installer-agent.js.map +0 -1
- package/dist/telemetry.d.ts +0 -2
- package/dist/telemetry.js +0 -29
- package/dist/telemetry.js.map +0 -1
- package/dist/test/force-insecure-storage.d.ts +0 -1
- package/dist/test/force-insecure-storage.js +0 -9
- package/dist/test/force-insecure-storage.js.map +0 -1
- package/dist/test/setup.d.ts +0 -1
- package/dist/test/setup.js +0 -38
- package/dist/test/setup.js.map +0 -1
- package/dist/utils/analytics.d.ts +0 -66
- package/dist/utils/analytics.js +0 -330
- package/dist/utils/analytics.js.map +0 -1
- package/dist/utils/bash.d.ts +0 -2
- package/dist/utils/bash.js +0 -17
- package/dist/utils/bash.js.map +0 -1
- package/dist/utils/box.d.ts +0 -9
- package/dist/utils/box.js +0 -15
- package/dist/utils/box.js.map +0 -1
- package/dist/utils/cli-exit.d.ts +0 -15
- package/dist/utils/cli-exit.js +0 -11
- package/dist/utils/cli-exit.js.map +0 -1
- package/dist/utils/cli-symbols.d.ts +0 -44
- package/dist/utils/cli-symbols.js +0 -58
- package/dist/utils/cli-symbols.js.map +0 -1
- package/dist/utils/command-invocation.d.ts +0 -10
- package/dist/utils/command-invocation.js +0 -26
- package/dist/utils/command-invocation.js.map +0 -1
- package/dist/utils/command-telemetry.d.ts +0 -17
- package/dist/utils/command-telemetry.js +0 -67
- package/dist/utils/command-telemetry.js.map +0 -1
- package/dist/utils/crash-reporter.d.ts +0 -13
- package/dist/utils/crash-reporter.js +0 -91
- package/dist/utils/crash-reporter.js.map +0 -1
- package/dist/utils/debug.d.ts +0 -9
- package/dist/utils/debug.js +0 -105
- package/dist/utils/debug.js.map +0 -1
- package/dist/utils/env-parser.d.ts +0 -5
- package/dist/utils/env-parser.js +0 -18
- package/dist/utils/env-parser.js.map +0 -1
- package/dist/utils/environment.d.ts +0 -10
- package/dist/utils/environment.js +0 -69
- package/dist/utils/environment.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -3
- package/dist/utils/errors.js +0 -7
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/exec-file.d.ts +0 -15
- package/dist/utils/exec-file.js +0 -39
- package/dist/utils/exec-file.js.map +0 -1
- package/dist/utils/exit-codes.d.ts +0 -31
- package/dist/utils/exit-codes.js +0 -69
- package/dist/utils/exit-codes.js.map +0 -1
- package/dist/utils/git-utils.d.ts +0 -23
- package/dist/utils/git-utils.js +0 -86
- package/dist/utils/git-utils.js.map +0 -1
- package/dist/utils/help-json.d.ts +0 -58
- package/dist/utils/help-json.js +0 -1577
- package/dist/utils/help-json.js.map +0 -1
- package/dist/utils/interaction-mode.d.ts +0 -25
- package/dist/utils/interaction-mode.js +0 -99
- package/dist/utils/interaction-mode.js.map +0 -1
- package/dist/utils/lock-art.d.ts +0 -4
- package/dist/utils/lock-art.js +0 -73
- package/dist/utils/lock-art.js.map +0 -1
- package/dist/utils/logging.d.ts +0 -9
- package/dist/utils/logging.js +0 -36
- package/dist/utils/logging.js.map +0 -1
- package/dist/utils/ndjson.d.ts +0 -16
- package/dist/utils/ndjson.js +0 -18
- package/dist/utils/ndjson.js.map +0 -1
- package/dist/utils/output.d.ts +0 -60
- package/dist/utils/output.js +0 -124
- package/dist/utils/output.js.map +0 -1
- package/dist/utils/package-json.d.ts +0 -26
- package/dist/utils/package-json.js +0 -32
- package/dist/utils/package-json.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -21
- package/dist/utils/package-manager.js +0 -166
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -5
- package/dist/utils/paths.js +0 -18
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/platform.d.ts +0 -8
- package/dist/utils/platform.js +0 -7
- package/dist/utils/platform.js.map +0 -1
- package/dist/utils/recovery-hints.d.ts +0 -42
- package/dist/utils/recovery-hints.js +0 -92
- package/dist/utils/recovery-hints.js.map +0 -1
- package/dist/utils/redact.d.ts +0 -5
- package/dist/utils/redact.js +0 -29
- package/dist/utils/redact.js.map +0 -1
- package/dist/utils/register-subcommand.d.ts +0 -10
- package/dist/utils/register-subcommand.js +0 -33
- package/dist/utils/register-subcommand.js.map +0 -1
- package/dist/utils/semver.d.ts +0 -10
- package/dist/utils/semver.js +0 -43
- package/dist/utils/semver.js.map +0 -1
- package/dist/utils/string.d.ts +0 -1
- package/dist/utils/string.js +0 -6
- package/dist/utils/string.js.map +0 -1
- package/dist/utils/summary-box.d.ts +0 -25
- package/dist/utils/summary-box.js +0 -211
- package/dist/utils/summary-box.js.map +0 -1
- package/dist/utils/table.d.ts +0 -5
- package/dist/utils/table.js +0 -18
- package/dist/utils/table.js.map +0 -1
- package/dist/utils/telemetry-client.d.ts +0 -43
- package/dist/utils/telemetry-client.js +0 -171
- package/dist/utils/telemetry-client.js.map +0 -1
- package/dist/utils/telemetry-store-forward.d.ts +0 -11
- package/dist/utils/telemetry-store-forward.js +0 -94
- package/dist/utils/telemetry-store-forward.js.map +0 -1
- package/dist/utils/telemetry-types.d.ts +0 -100
- package/dist/utils/telemetry-types.js +0 -6
- package/dist/utils/telemetry-types.js.map +0 -1
- package/dist/utils/types.d.ts +0 -123
- package/dist/utils/types.js +0 -2
- package/dist/utils/types.js.map +0 -1
- package/dist/utils/ui-utils.d.ts +0 -97
- package/dist/utils/ui-utils.js +0 -449
- package/dist/utils/ui-utils.js.map +0 -1
- package/dist/utils/ui.d.ts +0 -148
- package/dist/utils/ui.js +0 -368
- package/dist/utils/ui.js.map +0 -1
- package/dist/utils/urls.d.ts +0 -13
- package/dist/utils/urls.js +0 -14
- package/dist/utils/urls.js.map +0 -1
- package/dist/utils/vendor/is-unicorn-supported.d.ts +0 -1
- package/dist/utils/vendor/is-unicorn-supported.js +0 -21
- package/dist/utils/vendor/is-unicorn-supported.js.map +0 -1
- package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +0 -4
- package/dist/vanilla-js/vanilla-js-installer-agent.js +0 -5
- package/dist/vanilla-js/vanilla-js-installer-agent.js.map +0 -1
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unclaimed Environment Provisioning API Client
|
|
3
|
-
*
|
|
4
|
-
* Provisions unauthenticated unclaimed environments and generates claim nonces.
|
|
5
|
-
* No authentication required for provisioning — claim tokens are used for
|
|
6
|
-
* subsequent claim operations.
|
|
7
|
-
*/
|
|
8
|
-
import { logInfo, logError } from '../utils/debug.js';
|
|
9
|
-
import { resolveApiBaseUrl } from './api-key.js';
|
|
10
|
-
export class UnclaimedEnvApiError extends Error {
|
|
11
|
-
statusCode;
|
|
12
|
-
constructor(message, statusCode) {
|
|
13
|
-
super(message);
|
|
14
|
-
this.statusCode = statusCode;
|
|
15
|
-
this.name = 'UnclaimedEnvApiError';
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
const REQUEST_TIMEOUT_MS = 30_000;
|
|
19
|
-
/**
|
|
20
|
-
* Provision a new unclaimed environment. No authentication required.
|
|
21
|
-
*
|
|
22
|
-
* @returns UnclaimedEnvProvisionResult containing clientId, apiKey, claimToken, and authkitDomain
|
|
23
|
-
* @throws UnclaimedEnvApiError on rate limit, network failure, timeout, or server error
|
|
24
|
-
*/
|
|
25
|
-
export async function provisionUnclaimedEnvironment() {
|
|
26
|
-
const url = `${resolveApiBaseUrl()}/x/one-shot-environments`;
|
|
27
|
-
const controller = new AbortController();
|
|
28
|
-
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
29
|
-
logInfo('[unclaimed-env-api] Provisioning unclaimed environment:', url);
|
|
30
|
-
try {
|
|
31
|
-
const res = await fetch(url, {
|
|
32
|
-
method: 'POST',
|
|
33
|
-
headers: { 'Content-Type': 'application/json' },
|
|
34
|
-
signal: controller.signal,
|
|
35
|
-
});
|
|
36
|
-
logInfo('[unclaimed-env-api] Response status:', res.status);
|
|
37
|
-
if (!res.ok) {
|
|
38
|
-
const text = await res.text().catch(() => '');
|
|
39
|
-
logError('[unclaimed-env-api] Error response:', res.status, text);
|
|
40
|
-
if (res.status === 429) {
|
|
41
|
-
throw new UnclaimedEnvApiError('Rate limited. Please wait a moment and try again.', 429);
|
|
42
|
-
}
|
|
43
|
-
throw new UnclaimedEnvApiError(`Server error: ${res.status}`, res.status);
|
|
44
|
-
}
|
|
45
|
-
const data = (await res.json());
|
|
46
|
-
// Handle both camelCase and snake_case responses (API may respond in either format)
|
|
47
|
-
const clientId = data.clientId ?? data.client_id;
|
|
48
|
-
const apiKey = data.apiKey ?? data.api_key;
|
|
49
|
-
const claimToken = data.claimToken ?? data.claim_token;
|
|
50
|
-
const authkitDomain = data.authkitDomain ?? data.authkit_domain;
|
|
51
|
-
if (!clientId || !apiKey || !claimToken || !authkitDomain) {
|
|
52
|
-
logError('[unclaimed-env-api] Invalid response: missing required fields');
|
|
53
|
-
throw new UnclaimedEnvApiError('Invalid response: missing required fields');
|
|
54
|
-
}
|
|
55
|
-
logInfo('[unclaimed-env-api] Unclaimed environment provisioned successfully');
|
|
56
|
-
return { clientId, apiKey, claimToken, authkitDomain };
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
if (error instanceof UnclaimedEnvApiError)
|
|
60
|
-
throw error;
|
|
61
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
62
|
-
logError('[unclaimed-env-api] Request timed out');
|
|
63
|
-
throw new UnclaimedEnvApiError('Request timed out.');
|
|
64
|
-
}
|
|
65
|
-
logError('[unclaimed-env-api] Network error:', error instanceof Error ? error.message : 'Unknown');
|
|
66
|
-
throw new UnclaimedEnvApiError(`Network error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
clearTimeout(timeoutId);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Generate a claim nonce from a claim token + client ID.
|
|
74
|
-
* Returns { alreadyClaimed: true } if environment was already claimed.
|
|
75
|
-
*
|
|
76
|
-
* @param clientId - The client ID of the unclaimed environment
|
|
77
|
-
* @param claimToken - The claim token from provisioning
|
|
78
|
-
* @returns ClaimNonceResponse — either a nonce or already-claimed indicator
|
|
79
|
-
* @throws UnclaimedEnvApiError on invalid token, not found, or server error
|
|
80
|
-
*/
|
|
81
|
-
export async function createClaimNonce(clientId, claimToken) {
|
|
82
|
-
const url = `${resolveApiBaseUrl()}/x/one-shot-environments/claim-nonces`;
|
|
83
|
-
const controller = new AbortController();
|
|
84
|
-
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
85
|
-
logInfo('[unclaimed-env-api] Creating claim nonce:', url);
|
|
86
|
-
try {
|
|
87
|
-
const res = await fetch(url, {
|
|
88
|
-
method: 'POST',
|
|
89
|
-
headers: { 'Content-Type': 'application/json' },
|
|
90
|
-
body: JSON.stringify({ client_id: clientId, claim_token: claimToken }),
|
|
91
|
-
signal: controller.signal,
|
|
92
|
-
});
|
|
93
|
-
logInfo('[unclaimed-env-api] Response status:', res.status);
|
|
94
|
-
if (!res.ok) {
|
|
95
|
-
const text = await res.text().catch(() => '');
|
|
96
|
-
logError('[unclaimed-env-api] Error response:', res.status, text);
|
|
97
|
-
if (res.status === 401) {
|
|
98
|
-
throw new UnclaimedEnvApiError('Invalid claim token.', 401);
|
|
99
|
-
}
|
|
100
|
-
if (res.status === 404) {
|
|
101
|
-
throw new UnclaimedEnvApiError('Environment not found.', 404);
|
|
102
|
-
}
|
|
103
|
-
if (res.status === 409) {
|
|
104
|
-
logInfo('[unclaimed-env-api] Environment already claimed (409)');
|
|
105
|
-
return { alreadyClaimed: true };
|
|
106
|
-
}
|
|
107
|
-
if (res.status === 429) {
|
|
108
|
-
throw new UnclaimedEnvApiError('Rate limited. Please wait a moment and try again.', 429);
|
|
109
|
-
}
|
|
110
|
-
throw new UnclaimedEnvApiError(`Server error: ${res.status}`, res.status);
|
|
111
|
-
}
|
|
112
|
-
const data = (await res.json());
|
|
113
|
-
const alreadyClaimed = data.alreadyClaimed ?? data.already_claimed;
|
|
114
|
-
if (alreadyClaimed) {
|
|
115
|
-
logInfo('[unclaimed-env-api] Environment already claimed');
|
|
116
|
-
return { alreadyClaimed: true };
|
|
117
|
-
}
|
|
118
|
-
if (!data.nonce) {
|
|
119
|
-
logError('[unclaimed-env-api] Invalid response: missing nonce');
|
|
120
|
-
throw new UnclaimedEnvApiError('Invalid response: missing nonce');
|
|
121
|
-
}
|
|
122
|
-
logInfo('[unclaimed-env-api] Claim nonce created successfully');
|
|
123
|
-
return { nonce: data.nonce, alreadyClaimed: false };
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
if (error instanceof UnclaimedEnvApiError)
|
|
127
|
-
throw error;
|
|
128
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
129
|
-
logError('[unclaimed-env-api] Request timed out');
|
|
130
|
-
throw new UnclaimedEnvApiError('Request timed out.');
|
|
131
|
-
}
|
|
132
|
-
logError('[unclaimed-env-api] Network error:', error instanceof Error ? error.message : 'Unknown');
|
|
133
|
-
throw new UnclaimedEnvApiError(`Network error: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
134
|
-
}
|
|
135
|
-
finally {
|
|
136
|
-
clearTimeout(timeoutId);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=unclaimed-env-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unclaimed-env-api.js","sourceRoot":"","sources":["../../src/lib/unclaimed-env-api.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Unclaimed Environment Provisioning API Client\n *\n * Provisions unauthenticated unclaimed environments and generates claim nonces.\n * No authentication required for provisioning — claim tokens are used for\n * subsequent claim operations.\n */\n\nimport { logInfo, logError } from '../utils/debug.js';\nimport { resolveApiBaseUrl } from './api-key.js';\n\nexport interface UnclaimedEnvProvisionResult {\n clientId: string;\n apiKey: string;\n claimToken: string;\n authkitDomain: string;\n}\n\nexport interface ClaimNonceResult {\n nonce: string;\n alreadyClaimed: false;\n}\n\nexport interface AlreadyClaimedResult {\n alreadyClaimed: true;\n}\n\nexport type ClaimNonceResponse = ClaimNonceResult | AlreadyClaimedResult;\n\nexport class UnclaimedEnvApiError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n ) {\n super(message);\n this.name = 'UnclaimedEnvApiError';\n }\n}\n\nconst REQUEST_TIMEOUT_MS = 30_000;\n\n/**\n * Provision a new unclaimed environment. No authentication required.\n *\n * @returns UnclaimedEnvProvisionResult containing clientId, apiKey, claimToken, and authkitDomain\n * @throws UnclaimedEnvApiError on rate limit, network failure, timeout, or server error\n */\nexport async function provisionUnclaimedEnvironment(): Promise<UnclaimedEnvProvisionResult> {\n const url = `${resolveApiBaseUrl()}/x/one-shot-environments`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n logInfo('[unclaimed-env-api] Provisioning unclaimed environment:', url);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n signal: controller.signal,\n });\n\n logInfo('[unclaimed-env-api] Response status:', res.status);\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n logError('[unclaimed-env-api] Error response:', res.status, text);\n\n if (res.status === 429) {\n throw new UnclaimedEnvApiError('Rate limited. Please wait a moment and try again.', 429);\n }\n\n throw new UnclaimedEnvApiError(`Server error: ${res.status}`, res.status);\n }\n\n const data = (await res.json()) as {\n clientId?: string;\n apiKey?: string;\n claimToken?: string;\n authkitDomain?: string;\n client_id?: string;\n api_key?: string;\n claim_token?: string;\n authkit_domain?: string;\n };\n\n // Handle both camelCase and snake_case responses (API may respond in either format)\n const clientId = data.clientId ?? data.client_id;\n const apiKey = data.apiKey ?? data.api_key;\n const claimToken = data.claimToken ?? data.claim_token;\n const authkitDomain = data.authkitDomain ?? data.authkit_domain;\n\n if (!clientId || !apiKey || !claimToken || !authkitDomain) {\n logError('[unclaimed-env-api] Invalid response: missing required fields');\n throw new UnclaimedEnvApiError('Invalid response: missing required fields');\n }\n\n logInfo('[unclaimed-env-api] Unclaimed environment provisioned successfully');\n return { clientId, apiKey, claimToken, authkitDomain };\n } catch (error) {\n if (error instanceof UnclaimedEnvApiError) throw error;\n if (error instanceof Error && error.name === 'AbortError') {\n logError('[unclaimed-env-api] Request timed out');\n throw new UnclaimedEnvApiError('Request timed out.');\n }\n logError('[unclaimed-env-api] Network error:', error instanceof Error ? error.message : 'Unknown');\n throw new UnclaimedEnvApiError(`Network error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n } finally {\n clearTimeout(timeoutId);\n }\n}\n\n/**\n * Generate a claim nonce from a claim token + client ID.\n * Returns { alreadyClaimed: true } if environment was already claimed.\n *\n * @param clientId - The client ID of the unclaimed environment\n * @param claimToken - The claim token from provisioning\n * @returns ClaimNonceResponse — either a nonce or already-claimed indicator\n * @throws UnclaimedEnvApiError on invalid token, not found, or server error\n */\nexport async function createClaimNonce(clientId: string, claimToken: string): Promise<ClaimNonceResponse> {\n const url = `${resolveApiBaseUrl()}/x/one-shot-environments/claim-nonces`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n logInfo('[unclaimed-env-api] Creating claim nonce:', url);\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ client_id: clientId, claim_token: claimToken }),\n signal: controller.signal,\n });\n\n logInfo('[unclaimed-env-api] Response status:', res.status);\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n logError('[unclaimed-env-api] Error response:', res.status, text);\n\n if (res.status === 401) {\n throw new UnclaimedEnvApiError('Invalid claim token.', 401);\n }\n if (res.status === 404) {\n throw new UnclaimedEnvApiError('Environment not found.', 404);\n }\n if (res.status === 409) {\n logInfo('[unclaimed-env-api] Environment already claimed (409)');\n return { alreadyClaimed: true };\n }\n if (res.status === 429) {\n throw new UnclaimedEnvApiError('Rate limited. Please wait a moment and try again.', 429);\n }\n\n throw new UnclaimedEnvApiError(`Server error: ${res.status}`, res.status);\n }\n\n const data = (await res.json()) as {\n nonce?: string;\n alreadyClaimed?: boolean;\n already_claimed?: boolean;\n };\n\n const alreadyClaimed = data.alreadyClaimed ?? data.already_claimed;\n if (alreadyClaimed) {\n logInfo('[unclaimed-env-api] Environment already claimed');\n return { alreadyClaimed: true };\n }\n\n if (!data.nonce) {\n logError('[unclaimed-env-api] Invalid response: missing nonce');\n throw new UnclaimedEnvApiError('Invalid response: missing nonce');\n }\n\n logInfo('[unclaimed-env-api] Claim nonce created successfully');\n return { nonce: data.nonce, alreadyClaimed: false };\n } catch (error) {\n if (error instanceof UnclaimedEnvApiError) throw error;\n if (error instanceof Error && error.name === 'AbortError') {\n logError('[unclaimed-env-api] Request timed out');\n throw new UnclaimedEnvApiError('Request timed out.');\n }\n logError('[unclaimed-env-api] Network error:', error instanceof Error ? error.message : 'Unknown');\n throw new UnclaimedEnvApiError(`Network error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n } finally {\n clearTimeout(timeoutId);\n }\n}\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unclaimed environment provisioning helper.
|
|
3
|
-
*
|
|
4
|
-
* Calls the unclaimed env API, saves credentials to config store as type 'unclaimed',
|
|
5
|
-
* and returns whether provisioning succeeded. Non-fatal — wraps everything in
|
|
6
|
-
* try/catch so install flow can fall back to login.
|
|
7
|
-
*/
|
|
8
|
-
export interface UnclaimedEnvProvisionOptions {
|
|
9
|
-
installDir: string;
|
|
10
|
-
/** Redirect URI key name varies by framework */
|
|
11
|
-
redirectUriKey?: string;
|
|
12
|
-
/** Redirect URI value */
|
|
13
|
-
redirectUri?: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Try to provision an unclaimed environment. Non-fatal — returns true on success,
|
|
17
|
-
* false on any failure.
|
|
18
|
-
*
|
|
19
|
-
* On success:
|
|
20
|
-
* - Saves environment to config store as type 'unclaimed'
|
|
21
|
-
* - Sets it as active environment
|
|
22
|
-
* - Writes credentials (including cookie password and claim token) to .env.local
|
|
23
|
-
*/
|
|
24
|
-
export declare function tryProvisionUnclaimedEnv(options: UnclaimedEnvProvisionOptions): Promise<boolean>;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unclaimed environment provisioning helper.
|
|
3
|
-
*
|
|
4
|
-
* Calls the unclaimed env API, saves credentials to config store as type 'unclaimed',
|
|
5
|
-
* and returns whether provisioning succeeded. Non-fatal — wraps everything in
|
|
6
|
-
* try/catch so install flow can fall back to login.
|
|
7
|
-
*/
|
|
8
|
-
import chalk from 'chalk';
|
|
9
|
-
import { provisionUnclaimedEnvironment, UnclaimedEnvApiError } from './unclaimed-env-api.js';
|
|
10
|
-
import { getConfig, saveConfig, getActiveEnvironment, freshEnvKey } from './config-store.js';
|
|
11
|
-
import { writeCredentialsEnv } from './env-writer.js';
|
|
12
|
-
import { logInfo, logError } from '../utils/debug.js';
|
|
13
|
-
import { renderStderrNotice } from '../utils/box.js';
|
|
14
|
-
import ui from '../utils/ui.js';
|
|
15
|
-
import { formatWorkOSCommand } from '../utils/command-invocation.js';
|
|
16
|
-
/**
|
|
17
|
-
* Try to provision an unclaimed environment. Non-fatal — returns true on success,
|
|
18
|
-
* false on any failure.
|
|
19
|
-
*
|
|
20
|
-
* On success:
|
|
21
|
-
* - Saves environment to config store as type 'unclaimed'
|
|
22
|
-
* - Sets it as active environment
|
|
23
|
-
* - Writes credentials (including cookie password and claim token) to .env.local
|
|
24
|
-
*/
|
|
25
|
-
export async function tryProvisionUnclaimedEnv(options) {
|
|
26
|
-
try {
|
|
27
|
-
logInfo('[unclaimed-env-provision] Attempting unclaimed environment provisioning');
|
|
28
|
-
const result = await provisionUnclaimedEnvironment();
|
|
29
|
-
// Write .env.local first — if this fails, config stays clean (no orphan entries)
|
|
30
|
-
const envVars = {
|
|
31
|
-
WORKOS_API_KEY: result.apiKey,
|
|
32
|
-
WORKOS_CLIENT_ID: result.clientId,
|
|
33
|
-
WORKOS_CLAIM_TOKEN: result.claimToken,
|
|
34
|
-
};
|
|
35
|
-
if (options.redirectUri) {
|
|
36
|
-
const key = options.redirectUriKey ?? 'WORKOS_REDIRECT_URI';
|
|
37
|
-
envVars[key] = options.redirectUri;
|
|
38
|
-
}
|
|
39
|
-
writeCredentialsEnv(options.installDir, envVars);
|
|
40
|
-
// Save to config store (after .env.local succeeds). A fresh key so a repeated
|
|
41
|
-
// provision never clobbers an earlier env's claim token (unrecoverable — it
|
|
42
|
-
// lives only in this config).
|
|
43
|
-
const config = getConfig() ?? { environments: {} };
|
|
44
|
-
const key = freshEnvKey(config, 'unclaimed');
|
|
45
|
-
config.environments[key] = {
|
|
46
|
-
name: key,
|
|
47
|
-
type: 'unclaimed',
|
|
48
|
-
apiKey: result.apiKey,
|
|
49
|
-
clientId: result.clientId,
|
|
50
|
-
claimToken: result.claimToken,
|
|
51
|
-
};
|
|
52
|
-
config.activeEnvironment = key;
|
|
53
|
-
saveConfig(config);
|
|
54
|
-
// Verify config persisted — critical for `workos env claim` in a later process
|
|
55
|
-
const readBack = getActiveEnvironment();
|
|
56
|
-
if (!readBack || readBack.type !== 'unclaimed') {
|
|
57
|
-
logError('[unclaimed-env-provision] Config read-back failed after save — claim token may not persist');
|
|
58
|
-
ui.log.warn('Environment provisioned but config storage may be unreliable. Falling back to login...');
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
logInfo('[unclaimed-env-provision] Unclaimed environment provisioned and saved');
|
|
62
|
-
renderStderrNotice(`${chalk.green('✓')} ${chalk.bold('Environment provisioned')} ${chalk.dim('— credentials saved to your project')}`, `${chalk.dim('Run')} ${chalk.bold.cyan(formatWorkOSCommand('env claim'))} ${chalk.dim('to link it to your account.')}`);
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
67
|
-
logError('[unclaimed-env-provision] Failed:', message);
|
|
68
|
-
if (error instanceof UnclaimedEnvApiError) {
|
|
69
|
-
if (error.statusCode === 429) {
|
|
70
|
-
ui.log.warn('WorkOS is busy, falling back to login...');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
// Non-API errors (filesystem, keyring) are unexpected — surface to user
|
|
75
|
-
ui.log.warn(`Could not set up environment: ${message}. Falling back to login...`);
|
|
76
|
-
}
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=unclaimed-env-provision.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unclaimed-env-provision.js","sourceRoot":"","sources":["../../src/lib/unclaimed-env-provision.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAUrE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAqC;IAClF,IAAI,CAAC;QACH,OAAO,CAAC,yEAAyE,CAAC,CAAC;QAEnF,MAAM,MAAM,GAAG,MAAM,6BAA6B,EAAE,CAAC;QAErD,iFAAiF;QACjF,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,MAAM,CAAC,MAAM;YAC7B,gBAAgB,EAAE,MAAM,CAAC,QAAQ;YACjC,kBAAkB,EAAE,MAAM,CAAC,UAAU;SACtC,CAAC;QAEF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,IAAI,qBAAqB,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;QACrC,CAAC;QAED,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjD,8EAA8E;QAC9E,4EAA4E;QAC5E,8BAA8B;QAC9B,MAAM,MAAM,GAAc,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG;YACzB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QACF,MAAM,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAC/B,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnB,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/C,QAAQ,CAAC,4FAA4F,CAAC,CAAC;YACvG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;YACtG,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,CAAC,uEAAuE,CAAC,CAAC;QACjF,kBAAkB,CAChB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,EAAE,EAClH,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,CACvH,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,QAAQ,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;QAEvD,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC7B,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,OAAO,4BAA4B,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["/**\n * Unclaimed environment provisioning helper.\n *\n * Calls the unclaimed env API, saves credentials to config store as type 'unclaimed',\n * and returns whether provisioning succeeded. Non-fatal — wraps everything in\n * try/catch so install flow can fall back to login.\n */\n\nimport chalk from 'chalk';\nimport { provisionUnclaimedEnvironment, UnclaimedEnvApiError } from './unclaimed-env-api.js';\nimport { getConfig, saveConfig, getActiveEnvironment, freshEnvKey } from './config-store.js';\nimport type { CliConfig } from './config-store.js';\nimport { writeCredentialsEnv } from './env-writer.js';\nimport { logInfo, logError } from '../utils/debug.js';\nimport { renderStderrNotice } from '../utils/box.js';\nimport ui from '../utils/ui.js';\nimport { formatWorkOSCommand } from '../utils/command-invocation.js';\n\nexport interface UnclaimedEnvProvisionOptions {\n installDir: string;\n /** Redirect URI key name varies by framework */\n redirectUriKey?: string;\n /** Redirect URI value */\n redirectUri?: string;\n}\n\n/**\n * Try to provision an unclaimed environment. Non-fatal — returns true on success,\n * false on any failure.\n *\n * On success:\n * - Saves environment to config store as type 'unclaimed'\n * - Sets it as active environment\n * - Writes credentials (including cookie password and claim token) to .env.local\n */\nexport async function tryProvisionUnclaimedEnv(options: UnclaimedEnvProvisionOptions): Promise<boolean> {\n try {\n logInfo('[unclaimed-env-provision] Attempting unclaimed environment provisioning');\n\n const result = await provisionUnclaimedEnvironment();\n\n // Write .env.local first — if this fails, config stays clean (no orphan entries)\n const envVars: Record<string, string> = {\n WORKOS_API_KEY: result.apiKey,\n WORKOS_CLIENT_ID: result.clientId,\n WORKOS_CLAIM_TOKEN: result.claimToken,\n };\n\n if (options.redirectUri) {\n const key = options.redirectUriKey ?? 'WORKOS_REDIRECT_URI';\n envVars[key] = options.redirectUri;\n }\n\n writeCredentialsEnv(options.installDir, envVars);\n\n // Save to config store (after .env.local succeeds). A fresh key so a repeated\n // provision never clobbers an earlier env's claim token (unrecoverable — it\n // lives only in this config).\n const config: CliConfig = getConfig() ?? { environments: {} };\n const key = freshEnvKey(config, 'unclaimed');\n config.environments[key] = {\n name: key,\n type: 'unclaimed',\n apiKey: result.apiKey,\n clientId: result.clientId,\n claimToken: result.claimToken,\n };\n config.activeEnvironment = key;\n saveConfig(config);\n\n // Verify config persisted — critical for `workos env claim` in a later process\n const readBack = getActiveEnvironment();\n if (!readBack || readBack.type !== 'unclaimed') {\n logError('[unclaimed-env-provision] Config read-back failed after save — claim token may not persist');\n ui.log.warn('Environment provisioned but config storage may be unreliable. Falling back to login...');\n return false;\n }\n\n logInfo('[unclaimed-env-provision] Unclaimed environment provisioned and saved');\n renderStderrNotice(\n `${chalk.green('✓')} ${chalk.bold('Environment provisioned')} ${chalk.dim('— credentials saved to your project')}`,\n `${chalk.dim('Run')} ${chalk.bold.cyan(formatWorkOSCommand('env claim'))} ${chalk.dim('to link it to your account.')}`,\n );\n\n return true;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n logError('[unclaimed-env-provision] Failed:', message);\n\n if (error instanceof UnclaimedEnvApiError) {\n if (error.statusCode === 429) {\n ui.log.warn('WorkOS is busy, falling back to login...');\n }\n } else {\n // Non-API errors (filesystem, keyring) are unexpected — surface to user\n ui.log.warn(`Could not set up environment: ${message}. Falling back to login...`);\n }\n\n return false;\n }\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unclaimed environment warning module.
|
|
3
|
-
*
|
|
4
|
-
* Shows a one-line stderr warning when the active environment is unclaimed.
|
|
5
|
-
* On first run, checks if the environment was claimed externally (e.g. via
|
|
6
|
-
* browser) and updates the local config if so.
|
|
7
|
-
* Never throws — all errors are caught to avoid blocking management commands.
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Show a warning if the active environment is unclaimed.
|
|
11
|
-
* Non-blocking — never throws.
|
|
12
|
-
*/
|
|
13
|
-
export declare function warnIfUnclaimed(): Promise<void>;
|
|
14
|
-
/** Reset session state (for testing) */
|
|
15
|
-
export declare function resetUnclaimedWarningState(): void;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unclaimed environment warning module.
|
|
3
|
-
*
|
|
4
|
-
* Shows a one-line stderr warning when the active environment is unclaimed.
|
|
5
|
-
* On first run, checks if the environment was claimed externally (e.g. via
|
|
6
|
-
* browser) and updates the local config if so.
|
|
7
|
-
* Never throws — all errors are caught to avoid blocking management commands.
|
|
8
|
-
*/
|
|
9
|
-
import chalk from 'chalk';
|
|
10
|
-
import { getActiveEnvironment, isUnclaimedEnvironment, markEnvironmentClaimed } from './config-store.js';
|
|
11
|
-
import { createClaimNonce, UnclaimedEnvApiError } from './unclaimed-env-api.js';
|
|
12
|
-
import { logError, logInfo } from '../utils/debug.js';
|
|
13
|
-
import { isJsonMode } from '../utils/output.js';
|
|
14
|
-
import { renderStderrNotice } from '../utils/box.js';
|
|
15
|
-
import { pill } from '../utils/ui.js';
|
|
16
|
-
import { markStartupNoticeShown } from './startup-notice-gate.js';
|
|
17
|
-
import { formatWorkOSCommand } from '../utils/command-invocation.js';
|
|
18
|
-
let warningShownThisSession = false;
|
|
19
|
-
let claimCheckDoneThisSession = false;
|
|
20
|
-
/**
|
|
21
|
-
* Show a warning if the active environment is unclaimed.
|
|
22
|
-
* Non-blocking — never throws.
|
|
23
|
-
*/
|
|
24
|
-
export async function warnIfUnclaimed() {
|
|
25
|
-
try {
|
|
26
|
-
const env = getActiveEnvironment();
|
|
27
|
-
if (!env || !isUnclaimedEnvironment(env))
|
|
28
|
-
return;
|
|
29
|
-
// Check once per session if the env was claimed externally
|
|
30
|
-
// claimToken and clientId guaranteed present by UnclaimedEnvironmentConfig
|
|
31
|
-
if (!claimCheckDoneThisSession) {
|
|
32
|
-
claimCheckDoneThisSession = true;
|
|
33
|
-
try {
|
|
34
|
-
const result = await createClaimNonce(env.clientId, env.claimToken);
|
|
35
|
-
if (result.alreadyClaimed) {
|
|
36
|
-
markEnvironmentClaimed();
|
|
37
|
-
logInfo('[unclaimed-warning] Environment was claimed externally, config updated');
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
catch (error) {
|
|
42
|
-
if (error instanceof UnclaimedEnvApiError && error.statusCode === 401) {
|
|
43
|
-
// 401 likely means the claim token was invalidated after the environment
|
|
44
|
-
// was claimed. We assume claimed and promote to sandbox.
|
|
45
|
-
markEnvironmentClaimed();
|
|
46
|
-
logInfo('[unclaimed-warning] Claim token invalid/expired, removed');
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// Log non-401 errors for diagnostics, then fall through to show warning
|
|
50
|
-
if (error instanceof UnclaimedEnvApiError) {
|
|
51
|
-
logError('[unclaimed-warning] Claim check failed:', error.statusCode, error.message);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
logError('[unclaimed-warning] Claim check failed:', error instanceof Error ? error.message : String(error));
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// Show warning once per session
|
|
59
|
-
if (warningShownThisSession)
|
|
60
|
-
return;
|
|
61
|
-
warningShownThisSession = true;
|
|
62
|
-
if (!isJsonMode()) {
|
|
63
|
-
renderStderrNotice(`${pill('WARN', 'warn')} ${chalk.bold('Unclaimed environment')} ${chalk.dim('— not linked to your account')}`, `${chalk.dim('Run')} ${chalk.bold.cyan(formatWorkOSCommand('env claim'))} ${chalk.dim('to save it — its credentials live only on this machine.')}`);
|
|
64
|
-
// Claim the one-notice-per-run slot so the lower-priority MCP banner defers.
|
|
65
|
-
markStartupNoticeShown();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
// Never block command execution, but log for diagnostics
|
|
70
|
-
logError('[unclaimed-warning] Unexpected error:', error instanceof Error ? error.message : String(error));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/** Reset session state (for testing) */
|
|
74
|
-
export function resetUnclaimedWarningState() {
|
|
75
|
-
warningShownThisSession = false;
|
|
76
|
-
claimCheckDoneThisSession = false;
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=unclaimed-warning.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unclaimed-warning.js","sourceRoot":"","sources":["../../src/lib/unclaimed-warning.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Unclaimed environment warning module.\n *\n * Shows a one-line stderr warning when the active environment is unclaimed.\n * On first run, checks if the environment was claimed externally (e.g. via\n * browser) and updates the local config if so.\n * Never throws — all errors are caught to avoid blocking management commands.\n */\n\nimport chalk from 'chalk';\nimport { getActiveEnvironment, isUnclaimedEnvironment, markEnvironmentClaimed } from './config-store.js';\nimport { createClaimNonce, UnclaimedEnvApiError } from './unclaimed-env-api.js';\nimport { logError, logInfo } from '../utils/debug.js';\nimport { isJsonMode } from '../utils/output.js';\nimport { renderStderrNotice } from '../utils/box.js';\nimport { pill } from '../utils/ui.js';\nimport { markStartupNoticeShown } from './startup-notice-gate.js';\nimport { formatWorkOSCommand } from '../utils/command-invocation.js';\n\nlet warningShownThisSession = false;\nlet claimCheckDoneThisSession = false;\n\n/**\n * Show a warning if the active environment is unclaimed.\n * Non-blocking — never throws.\n */\nexport async function warnIfUnclaimed(): Promise<void> {\n try {\n const env = getActiveEnvironment();\n if (!env || !isUnclaimedEnvironment(env)) return;\n\n // Check once per session if the env was claimed externally\n // claimToken and clientId guaranteed present by UnclaimedEnvironmentConfig\n if (!claimCheckDoneThisSession) {\n claimCheckDoneThisSession = true;\n try {\n const result = await createClaimNonce(env.clientId, env.claimToken);\n if (result.alreadyClaimed) {\n markEnvironmentClaimed();\n logInfo('[unclaimed-warning] Environment was claimed externally, config updated');\n return;\n }\n } catch (error) {\n if (error instanceof UnclaimedEnvApiError && error.statusCode === 401) {\n // 401 likely means the claim token was invalidated after the environment\n // was claimed. We assume claimed and promote to sandbox.\n markEnvironmentClaimed();\n logInfo('[unclaimed-warning] Claim token invalid/expired, removed');\n return;\n }\n // Log non-401 errors for diagnostics, then fall through to show warning\n if (error instanceof UnclaimedEnvApiError) {\n logError('[unclaimed-warning] Claim check failed:', error.statusCode, error.message);\n } else {\n logError('[unclaimed-warning] Claim check failed:', error instanceof Error ? error.message : String(error));\n }\n }\n }\n\n // Show warning once per session\n if (warningShownThisSession) return;\n warningShownThisSession = true;\n\n if (!isJsonMode()) {\n renderStderrNotice(\n `${pill('WARN', 'warn')} ${chalk.bold('Unclaimed environment')} ${chalk.dim('— not linked to your account')}`,\n `${chalk.dim('Run')} ${chalk.bold.cyan(formatWorkOSCommand('env claim'))} ${chalk.dim('to save it — its credentials live only on this machine.')}`,\n );\n // Claim the one-notice-per-run slot so the lower-priority MCP banner defers.\n markStartupNoticeShown();\n }\n } catch (error) {\n // Never block command execution, but log for diagnostics\n logError('[unclaimed-warning] Unexpected error:', error instanceof Error ? error.message : String(error));\n }\n}\n\n/** Reset session state (for testing) */\nexport function resetUnclaimedWarningState(): void {\n warningShownThisSession = false;\n claimCheckDoneThisSession = false;\n}\n"]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { ValidationIssue } from './types.js';
|
|
2
|
-
export interface BuildResult {
|
|
3
|
-
success: boolean;
|
|
4
|
-
issues: ValidationIssue[];
|
|
5
|
-
durationMs: number;
|
|
6
|
-
stdout: string;
|
|
7
|
-
stderr: string;
|
|
8
|
-
}
|
|
9
|
-
export declare function runBuildValidation(projectDir: string, timeoutMs?: number): Promise<BuildResult>;
|
|
10
|
-
export declare function detectPackageManager(projectDir: string): 'pnpm' | 'yarn' | 'npm';
|
|
11
|
-
export declare function hasBuildScriptInPackageJson(projectDir: string): Promise<boolean>;
|
|
12
|
-
export interface BuildCommand {
|
|
13
|
-
command: string;
|
|
14
|
-
args: string[];
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Detect the build command for a project by checking ecosystem markers.
|
|
18
|
-
* Returns null if no build system detected — caller should skip build validation.
|
|
19
|
-
*/
|
|
20
|
-
export declare function detectBuildCommand(projectDir: string): Promise<BuildCommand | null>;
|
|
21
|
-
export declare function parseBuildErrors(output: string): string[];
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process';
|
|
2
|
-
import { existsSync, readdirSync } from 'fs';
|
|
3
|
-
import { readFile } from 'fs/promises';
|
|
4
|
-
import { join } from 'path';
|
|
5
|
-
import { IS_WINDOWS, SPAWN_OPTS } from '../../utils/platform.js';
|
|
6
|
-
export async function runBuildValidation(projectDir, timeoutMs = 60000) {
|
|
7
|
-
const startTime = Date.now();
|
|
8
|
-
const pm = detectPackageManager(projectDir);
|
|
9
|
-
const hasBuildScript = await hasBuildScriptInPackageJson(projectDir);
|
|
10
|
-
if (!hasBuildScript) {
|
|
11
|
-
return {
|
|
12
|
-
success: true,
|
|
13
|
-
issues: [],
|
|
14
|
-
durationMs: Date.now() - startTime,
|
|
15
|
-
stdout: '',
|
|
16
|
-
stderr: '',
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
const args = pm === 'npm' ? ['run', 'build'] : ['build'];
|
|
21
|
-
const proc = spawn(pm, args, {
|
|
22
|
-
cwd: projectDir,
|
|
23
|
-
timeout: timeoutMs,
|
|
24
|
-
...SPAWN_OPTS,
|
|
25
|
-
});
|
|
26
|
-
let stdout = '';
|
|
27
|
-
let stderr = '';
|
|
28
|
-
proc.stdout?.on('data', (data) => {
|
|
29
|
-
stdout += data.toString();
|
|
30
|
-
});
|
|
31
|
-
proc.stderr?.on('data', (data) => {
|
|
32
|
-
stderr += data.toString();
|
|
33
|
-
});
|
|
34
|
-
proc.on('close', (code) => {
|
|
35
|
-
const issues = [];
|
|
36
|
-
if (code !== 0) {
|
|
37
|
-
// Parse errors from output
|
|
38
|
-
const errors = parseBuildErrors(stdout + stderr);
|
|
39
|
-
for (const error of errors) {
|
|
40
|
-
issues.push({
|
|
41
|
-
type: 'file',
|
|
42
|
-
severity: 'error',
|
|
43
|
-
message: `Build error: ${error}`,
|
|
44
|
-
hint: 'Fix the error and run build again',
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// Fallback if no specific errors parsed
|
|
48
|
-
if (issues.length === 0) {
|
|
49
|
-
issues.push({
|
|
50
|
-
type: 'file',
|
|
51
|
-
severity: 'error',
|
|
52
|
-
message: 'Build failed',
|
|
53
|
-
hint: `Run \`${pm} ${args.join(' ')}\` to see full output`,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
resolve({
|
|
58
|
-
success: code === 0,
|
|
59
|
-
issues,
|
|
60
|
-
durationMs: Date.now() - startTime,
|
|
61
|
-
stdout,
|
|
62
|
-
stderr,
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
proc.on('error', (err) => {
|
|
66
|
-
resolve({
|
|
67
|
-
success: false,
|
|
68
|
-
issues: [
|
|
69
|
-
{
|
|
70
|
-
type: 'file',
|
|
71
|
-
severity: 'warning',
|
|
72
|
-
message: `Could not run build: ${err.message}`,
|
|
73
|
-
hint: 'Build validation skipped',
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
durationMs: Date.now() - startTime,
|
|
77
|
-
stdout: '',
|
|
78
|
-
stderr: '',
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
export function detectPackageManager(projectDir) {
|
|
84
|
-
if (existsSync(join(projectDir, 'pnpm-lock.yaml')))
|
|
85
|
-
return 'pnpm';
|
|
86
|
-
if (existsSync(join(projectDir, 'yarn.lock')))
|
|
87
|
-
return 'yarn';
|
|
88
|
-
return 'npm';
|
|
89
|
-
}
|
|
90
|
-
export async function hasBuildScriptInPackageJson(projectDir) {
|
|
91
|
-
try {
|
|
92
|
-
const content = await readFile(join(projectDir, 'package.json'), 'utf-8');
|
|
93
|
-
const pkg = JSON.parse(content);
|
|
94
|
-
return !!pkg.scripts?.build;
|
|
95
|
-
}
|
|
96
|
-
catch {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Detect the build command for a project by checking ecosystem markers.
|
|
102
|
-
* Returns null if no build system detected — caller should skip build validation.
|
|
103
|
-
*/
|
|
104
|
-
export async function detectBuildCommand(projectDir) {
|
|
105
|
-
const pm = detectPackageManager(projectDir);
|
|
106
|
-
if (await hasBuildScriptInPackageJson(projectDir)) {
|
|
107
|
-
const args = pm === 'npm' ? ['run', 'build'] : ['build'];
|
|
108
|
-
return { command: pm, args };
|
|
109
|
-
}
|
|
110
|
-
if (existsSync(join(projectDir, 'go.mod'))) {
|
|
111
|
-
return { command: 'go', args: ['build', './...'] };
|
|
112
|
-
}
|
|
113
|
-
if (existsSync(join(projectDir, 'mix.exs'))) {
|
|
114
|
-
return { command: 'mix', args: ['compile'] };
|
|
115
|
-
}
|
|
116
|
-
try {
|
|
117
|
-
const files = readdirSync(projectDir);
|
|
118
|
-
if (files.some((f) => f.endsWith('.csproj'))) {
|
|
119
|
-
return { command: 'dotnet', args: ['build'] };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
// Can't read directory
|
|
124
|
-
}
|
|
125
|
-
if (existsSync(join(projectDir, 'build.gradle.kts')) || existsSync(join(projectDir, 'build.gradle'))) {
|
|
126
|
-
const hasWrapper = IS_WINDOWS
|
|
127
|
-
? existsSync(join(projectDir, 'gradlew.bat'))
|
|
128
|
-
: existsSync(join(projectDir, 'gradlew'));
|
|
129
|
-
const gradlew = hasWrapper ? (IS_WINDOWS ? '.\\gradlew.bat' : './gradlew') : 'gradle';
|
|
130
|
-
return { command: gradlew, args: ['build'] };
|
|
131
|
-
}
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
export function parseBuildErrors(output) {
|
|
135
|
-
const errors = [];
|
|
136
|
-
// TypeScript errors: "file.ts(line,col): error TS..."
|
|
137
|
-
const tsErrors = output.match(/[\w./]+\.\w+\(\d+,\d+\):\s*error\s+TS\d+:.+/g);
|
|
138
|
-
if (tsErrors) {
|
|
139
|
-
errors.push(...tsErrors.slice(0, 5)); // Limit to first 5
|
|
140
|
-
}
|
|
141
|
-
// Next.js errors: "Error: ..."
|
|
142
|
-
const nextErrors = output.match(/Error:\s+.+/g);
|
|
143
|
-
if (nextErrors) {
|
|
144
|
-
errors.push(...nextErrors.slice(0, 5));
|
|
145
|
-
}
|
|
146
|
-
// ESLint errors: "file.ts line:col error ..."
|
|
147
|
-
const eslintErrors = output.match(/[\w./]+:\d+:\d+\s+error\s+.+/g);
|
|
148
|
-
if (eslintErrors) {
|
|
149
|
-
errors.push(...eslintErrors.slice(0, 5));
|
|
150
|
-
}
|
|
151
|
-
return errors;
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=build-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build-validator.js","sourceRoot":"","sources":["../../../src/lib/validation/build-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUjE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAAkB,EAAE,YAAoB,KAAK;IACpF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,MAAM,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAErE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE;YAC3B,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,SAAS;YAClB,GAAG,UAAU;SACd,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,MAAM,GAAsB,EAAE,CAAC;YAErC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,2BAA2B;gBAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;gBACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,gBAAgB,KAAK,EAAE;wBAChC,IAAI,EAAE,mCAAmC;qBAC1C,CAAC,CAAC;gBACL,CAAC;gBAED,wCAAwC;gBACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,cAAc;wBACvB,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB;qBAC3D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,CAAC;gBACN,OAAO,EAAE,IAAI,KAAK,CAAC;gBACnB,MAAM;gBACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAClC,MAAM;gBACN,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,SAAS;wBACnB,OAAO,EAAE,wBAAwB,GAAG,CAAC,OAAO,EAAE;wBAC9C,IAAI,EAAE,0BAA0B;qBACjC;iBACF;gBACD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAClC,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAClE,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,UAAkB;IAClE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqC,CAAC;QACpE,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IACzD,MAAM,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,MAAM,2BAA2B,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QACrG,MAAM,UAAU,GAAG,UAAU;YAC3B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAC7C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,sDAAsD;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9E,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;IAC3D,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,8CAA8C;IAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { spawn } from 'child_process';\nimport { existsSync, readdirSync } from 'fs';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\nimport type { ValidationIssue } from './types.js';\nimport { IS_WINDOWS, SPAWN_OPTS } from '../../utils/platform.js';\n\nexport interface BuildResult {\n success: boolean;\n issues: ValidationIssue[];\n durationMs: number;\n stdout: string;\n stderr: string;\n}\n\nexport async function runBuildValidation(projectDir: string, timeoutMs: number = 60000): Promise<BuildResult> {\n const startTime = Date.now();\n const pm = detectPackageManager(projectDir);\n const hasBuildScript = await hasBuildScriptInPackageJson(projectDir);\n\n if (!hasBuildScript) {\n return {\n success: true,\n issues: [],\n durationMs: Date.now() - startTime,\n stdout: '',\n stderr: '',\n };\n }\n\n return new Promise((resolve) => {\n const args = pm === 'npm' ? ['run', 'build'] : ['build'];\n const proc = spawn(pm, args, {\n cwd: projectDir,\n timeout: timeoutMs,\n ...SPAWN_OPTS,\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n proc.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n const issues: ValidationIssue[] = [];\n\n if (code !== 0) {\n // Parse errors from output\n const errors = parseBuildErrors(stdout + stderr);\n for (const error of errors) {\n issues.push({\n type: 'file',\n severity: 'error',\n message: `Build error: ${error}`,\n hint: 'Fix the error and run build again',\n });\n }\n\n // Fallback if no specific errors parsed\n if (issues.length === 0) {\n issues.push({\n type: 'file',\n severity: 'error',\n message: 'Build failed',\n hint: `Run \\`${pm} ${args.join(' ')}\\` to see full output`,\n });\n }\n }\n\n resolve({\n success: code === 0,\n issues,\n durationMs: Date.now() - startTime,\n stdout,\n stderr,\n });\n });\n\n proc.on('error', (err) => {\n resolve({\n success: false,\n issues: [\n {\n type: 'file',\n severity: 'warning',\n message: `Could not run build: ${err.message}`,\n hint: 'Build validation skipped',\n },\n ],\n durationMs: Date.now() - startTime,\n stdout: '',\n stderr: '',\n });\n });\n });\n}\n\nexport function detectPackageManager(projectDir: string): 'pnpm' | 'yarn' | 'npm' {\n if (existsSync(join(projectDir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(projectDir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport async function hasBuildScriptInPackageJson(projectDir: string): Promise<boolean> {\n try {\n const content = await readFile(join(projectDir, 'package.json'), 'utf-8');\n const pkg = JSON.parse(content) as { scripts?: { build?: string } };\n return !!pkg.scripts?.build;\n } catch {\n return false;\n }\n}\n\nexport interface BuildCommand {\n command: string;\n args: string[];\n}\n\n/**\n * Detect the build command for a project by checking ecosystem markers.\n * Returns null if no build system detected — caller should skip build validation.\n */\nexport async function detectBuildCommand(projectDir: string): Promise<BuildCommand | null> {\n const pm = detectPackageManager(projectDir);\n if (await hasBuildScriptInPackageJson(projectDir)) {\n const args = pm === 'npm' ? ['run', 'build'] : ['build'];\n return { command: pm, args };\n }\n\n if (existsSync(join(projectDir, 'go.mod'))) {\n return { command: 'go', args: ['build', './...'] };\n }\n\n if (existsSync(join(projectDir, 'mix.exs'))) {\n return { command: 'mix', args: ['compile'] };\n }\n\n try {\n const files = readdirSync(projectDir);\n if (files.some((f) => f.endsWith('.csproj'))) {\n return { command: 'dotnet', args: ['build'] };\n }\n } catch {\n // Can't read directory\n }\n\n if (existsSync(join(projectDir, 'build.gradle.kts')) || existsSync(join(projectDir, 'build.gradle'))) {\n const hasWrapper = IS_WINDOWS\n ? existsSync(join(projectDir, 'gradlew.bat'))\n : existsSync(join(projectDir, 'gradlew'));\n const gradlew = hasWrapper ? (IS_WINDOWS ? '.\\\\gradlew.bat' : './gradlew') : 'gradle';\n return { command: gradlew, args: ['build'] };\n }\n\n return null;\n}\n\nexport function parseBuildErrors(output: string): string[] {\n const errors: string[] = [];\n\n // TypeScript errors: \"file.ts(line,col): error TS...\"\n const tsErrors = output.match(/[\\w./]+\\.\\w+\\(\\d+,\\d+\\):\\s*error\\s+TS\\d+:.+/g);\n if (tsErrors) {\n errors.push(...tsErrors.slice(0, 5)); // Limit to first 5\n }\n\n // Next.js errors: \"Error: ...\"\n const nextErrors = output.match(/Error:\\s+.+/g);\n if (nextErrors) {\n errors.push(...nextErrors.slice(0, 5));\n }\n\n // ESLint errors: \"file.ts line:col error ...\"\n const eslintErrors = output.match(/[\\w./]+:\\d+:\\d+\\s+error\\s+.+/g);\n if (eslintErrors) {\n errors.push(...eslintErrors.slice(0, 5));\n }\n\n return errors;\n}\n"]}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { validateInstallation, validatePackages, validateEnvVars, validateFiles, validateFrameworkSpecific, type ValidateOptions, } from './validator.js';
|
|
2
|
-
export { runBuildValidation, type BuildResult } from './build-validator.js';
|
|
3
|
-
export { runQuickChecks, runTypecheckValidation, quickCheckValidateAndFormat } from './quick-checks.js';
|
|
4
|
-
export type { ValidationResult, ValidationRules, ValidationIssue, ValidationSeverity, ValidationIssueType, PackageRule, EnvVarRule, FileRule, VariantRules, QuickCheckResult, QuickChecksOutput, } from './types.js';
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { validateInstallation, validatePackages, validateEnvVars, validateFiles, validateFrameworkSpecific, } from './validator.js';
|
|
2
|
-
export { runBuildValidation } from './build-validator.js';
|
|
3
|
-
export { runQuickChecks, runTypecheckValidation, quickCheckValidateAndFormat } from './quick-checks.js';
|
|
4
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,yBAAyB,GAE1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["export {\n validateInstallation,\n validatePackages,\n validateEnvVars,\n validateFiles,\n validateFrameworkSpecific,\n type ValidateOptions,\n} from './validator.js';\nexport { runBuildValidation, type BuildResult } from './build-validator.js';\nexport { runQuickChecks, runTypecheckValidation, quickCheckValidateAndFormat } from './quick-checks.js';\nexport type {\n ValidationResult,\n ValidationRules,\n ValidationIssue,\n ValidationSeverity,\n ValidationIssueType,\n PackageRule,\n EnvVarRule,\n FileRule,\n VariantRules,\n QuickCheckResult,\n QuickChecksOutput,\n} from './types.js';\n"]}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { QuickCheckResult, QuickChecksOutput } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Run fast deterministic checks: typecheck first, then build.
|
|
4
|
-
* Short-circuits: if typecheck fails, skip build (build will fail too).
|
|
5
|
-
*/
|
|
6
|
-
export declare function runQuickChecks(projectDir: string, options?: {
|
|
7
|
-
skipBuild?: boolean;
|
|
8
|
-
timeoutMs?: number;
|
|
9
|
-
}): Promise<QuickChecksOutput>;
|
|
10
|
-
/**
|
|
11
|
-
* Run typecheck only (tsc --noEmit or framework equivalent).
|
|
12
|
-
* Faster than full build — catches type errors in ~5s.
|
|
13
|
-
*/
|
|
14
|
-
export declare function runTypecheckValidation(projectDir: string, timeoutMs?: number): Promise<QuickCheckResult>;
|
|
15
|
-
/**
|
|
16
|
-
* Validation callback suitable for RetryConfig.validateAndFormat.
|
|
17
|
-
* Returns null if checks pass, or an agent-ready error prompt if they fail.
|
|
18
|
-
*/
|
|
19
|
-
export declare function quickCheckValidateAndFormat(workingDirectory: string): Promise<string | null>;
|