workos 0.17.1 → 0.19.0
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 +11 -149
- package/dist/bin.js +155 -23
- package/dist/bin.js.map +1 -1
- package/dist/cli.config.d.ts +0 -2
- package/dist/cli.config.js +3 -3
- package/dist/cli.config.js.map +1 -1
- package/dist/commands/api/index.js +18 -10
- package/dist/commands/api/index.js.map +1 -1
- package/dist/commands/api/interactive.js +11 -11
- package/dist/commands/api/interactive.js.map +1 -1
- package/dist/commands/claim.js +28 -16
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/connection.js +3 -3
- package/dist/commands/connection.js.map +1 -1
- package/dist/commands/debug.d.ts +11 -0
- package/dist/commands/debug.js +30 -14
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/dev.d.ts +7 -8
- package/dist/commands/dev.js +14 -14
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/directory.js +3 -3
- package/dist/commands/directory.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/emulate.d.ts +1 -0
- package/dist/commands/emulate.js +3 -2
- package/dist/commands/emulate.js.map +1 -1
- package/dist/commands/env.d.ts +10 -0
- package/dist/commands/env.js +94 -18
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/install.js +9 -10
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +25 -15
- package/dist/commands/login.js +126 -71
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +4 -4
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/mcp.d.ts +14 -0
- package/dist/commands/mcp.js +99 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/migrations.js +2 -1
- package/dist/commands/migrations.js.map +1 -1
- package/dist/commands/seed.js +5 -4
- package/dist/commands/seed.js.map +1 -1
- package/dist/commands/setup.d.ts +50 -0
- package/dist/commands/setup.js +237 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/vault-run.js +3 -2
- package/dist/commands/vault-run.js.map +1 -1
- package/dist/commands/verify-login.d.ts +25 -0
- package/dist/commands/verify-login.js +158 -0
- package/dist/commands/verify-login.js.map +1 -0
- package/dist/doctor/checks/ai-analysis.js +2 -1
- package/dist/doctor/checks/ai-analysis.js.map +1 -1
- package/dist/doctor/checks/mcp.d.ts +15 -0
- package/dist/doctor/checks/mcp.js +34 -0
- package/dist/doctor/checks/mcp.js.map +1 -0
- package/dist/doctor/index.js +7 -1
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/issues.js +18 -1
- package/dist/doctor/issues.js.map +1 -1
- package/dist/doctor/output.js +18 -3
- package/dist/doctor/output.js.map +1 -1
- package/dist/doctor/types.d.ts +17 -0
- package/dist/doctor/types.js.map +1 -1
- package/dist/integrations/dotnet/index.js +1 -1
- package/dist/integrations/dotnet/index.js.map +1 -1
- package/dist/integrations/elixir/index.js +1 -1
- package/dist/integrations/elixir/index.js.map +1 -1
- package/dist/integrations/go/index.js +1 -1
- package/dist/integrations/go/index.js.map +1 -1
- package/dist/integrations/nextjs/index.js +8 -5
- package/dist/integrations/nextjs/index.js.map +1 -1
- package/dist/integrations/nextjs/utils.d.ts +1 -1
- package/dist/integrations/nextjs/utils.js +21 -6
- package/dist/integrations/nextjs/utils.js.map +1 -1
- package/dist/integrations/react-router/index.js +5 -5
- package/dist/integrations/react-router/index.js.map +1 -1
- package/dist/integrations/react-router/utils.js +28 -12
- package/dist/integrations/react-router/utils.js.map +1 -1
- package/dist/integrations/ruby/index.js +1 -1
- package/dist/integrations/ruby/index.js.map +1 -1
- package/dist/lib/adapters/cli-adapter.d.ts +33 -4
- package/dist/lib/adapters/cli-adapter.js +251 -135
- package/dist/lib/adapters/cli-adapter.js.map +1 -1
- package/dist/lib/adapters/dashboard-adapter.js +3 -3
- package/dist/lib/adapters/dashboard-adapter.js.map +1 -1
- package/dist/lib/adapters/headless-adapter.d.ts +7 -0
- package/dist/lib/adapters/headless-adapter.js +42 -5
- package/dist/lib/adapters/headless-adapter.js.map +1 -1
- package/dist/lib/agent-interface.js +19 -5
- package/dist/lib/agent-interface.js.map +1 -1
- package/dist/lib/agent-runner.js +1 -1
- package/dist/lib/agent-runner.js.map +1 -1
- package/dist/lib/ai-content.js +2 -1
- package/dist/lib/ai-content.js.map +1 -1
- package/dist/lib/api-key.js +2 -1
- package/dist/lib/api-key.js.map +1 -1
- package/dist/lib/completion-data.d.ts +33 -0
- package/dist/lib/completion-data.js +33 -0
- package/dist/lib/completion-data.js.map +1 -0
- package/dist/lib/config-store.d.ts +13 -0
- package/dist/lib/config-store.js +24 -0
- package/dist/lib/config-store.js.map +1 -1
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +17 -0
- package/dist/lib/constants.js +17 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/events.d.ts +34 -1
- package/dist/lib/events.js.map +1 -1
- package/dist/lib/framework-config.d.ts +6 -0
- package/dist/lib/framework-config.js.map +1 -1
- package/dist/lib/installer-core.d.ts +34 -21
- package/dist/lib/installer-core.js +24 -5
- package/dist/lib/installer-core.js.map +1 -1
- package/dist/lib/installer-core.types.d.ts +3 -1
- package/dist/lib/installer-core.types.js.map +1 -1
- package/dist/lib/mcp-clients.d.ts +45 -0
- package/dist/lib/mcp-clients.js +297 -0
- package/dist/lib/mcp-clients.js.map +1 -0
- package/dist/lib/port-detection.js +19 -13
- package/dist/lib/port-detection.js.map +1 -1
- package/dist/lib/preferences.d.ts +42 -0
- package/dist/lib/preferences.js +34 -5
- package/dist/lib/preferences.js.map +1 -1
- package/dist/lib/run-with-core.js +42 -4
- package/dist/lib/run-with-core.js.map +1 -1
- package/dist/lib/settings.d.ts +5 -14
- package/dist/lib/settings.js +5 -16
- package/dist/lib/settings.js.map +1 -1
- package/dist/lib/startup-notice-gate.d.ts +21 -0
- package/dist/lib/startup-notice-gate.js +29 -0
- package/dist/lib/startup-notice-gate.js.map +1 -0
- package/dist/lib/telemetry-notice.d.ts +5 -5
- package/dist/lib/telemetry-notice.js +10 -8
- package/dist/lib/telemetry-notice.js.map +1 -1
- package/dist/lib/unclaimed-env-provision.js +15 -12
- package/dist/lib/unclaimed-env-provision.js.map +1 -1
- package/dist/lib/unclaimed-warning.js +7 -3
- package/dist/lib/unclaimed-warning.js.map +1 -1
- package/dist/lib/validation/security-checks.js +2 -1
- package/dist/lib/validation/security-checks.js.map +1 -1
- package/dist/lib/validation/validator.js +30 -3
- package/dist/lib/validation/validator.js.map +1 -1
- package/dist/lib/workos-management.js +26 -19
- package/dist/lib/workos-management.js.map +1 -1
- package/dist/run.d.ts +1 -0
- package/dist/run.js +5 -1
- package/dist/run.js.map +1 -1
- package/dist/steps/add-or-update-environment-variables.js +10 -10
- package/dist/steps/add-or-update-environment-variables.js.map +1 -1
- package/dist/steps/run-prettier.js +3 -3
- package/dist/steps/run-prettier.js.map +1 -1
- package/dist/steps/upload-environment-variables/index.js +15 -3
- package/dist/steps/upload-environment-variables/index.js.map +1 -1
- package/dist/steps/upload-environment-variables/providers/vercel.js +2 -2
- package/dist/steps/upload-environment-variables/providers/vercel.js.map +1 -1
- package/dist/utils/analytics.d.ts +1 -0
- package/dist/utils/analytics.js +5 -1
- package/dist/utils/analytics.js.map +1 -1
- package/dist/utils/box.d.ts +6 -30
- package/dist/utils/box.js +8 -95
- package/dist/utils/box.js.map +1 -1
- package/dist/utils/cli-symbols.d.ts +14 -2
- package/dist/utils/cli-symbols.js +12 -0
- package/dist/utils/cli-symbols.js.map +1 -1
- package/dist/utils/debug.js +3 -3
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/environment.js +1 -1
- package/dist/utils/environment.js.map +1 -1
- package/dist/utils/help-json.js +153 -4
- package/dist/utils/help-json.js.map +1 -1
- package/dist/utils/interaction-mode.d.ts +1 -1
- package/dist/utils/interaction-mode.js +0 -3
- package/dist/utils/interaction-mode.js.map +1 -1
- package/dist/utils/output.d.ts +5 -3
- package/dist/utils/output.js +5 -5
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/package-manager.js +1 -1
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/recovery-hints.d.ts +5 -0
- package/dist/utils/recovery-hints.js +12 -0
- package/dist/utils/recovery-hints.js.map +1 -1
- package/dist/utils/summary-box.d.ts +8 -1
- package/dist/utils/summary-box.js +67 -4
- package/dist/utils/summary-box.js.map +1 -1
- package/dist/utils/telemetry-types.d.ts +1 -1
- package/dist/utils/telemetry-types.js.map +1 -1
- package/dist/utils/types.d.ts +10 -0
- package/dist/utils/types.js.map +1 -1
- package/dist/utils/{clack-utils.d.ts → ui-utils.d.ts} +1 -1
- package/dist/utils/{clack-utils.js → ui-utils.js} +64 -37
- package/dist/utils/ui-utils.js.map +1 -0
- package/dist/utils/ui.d.ts +148 -0
- package/dist/utils/ui.js +368 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/urls.d.ts +9 -3
- package/dist/utils/urls.js +10 -4
- package/dist/utils/urls.js.map +1 -1
- package/package.json +13 -20
- package/dist/check-coverage.ts +0 -237
- package/dist/emulate/core/id.d.ts +0 -48
- package/dist/emulate/core/id.js +0 -73
- package/dist/emulate/core/id.js.map +0 -1
- package/dist/emulate/core/index.d.ts +0 -8
- package/dist/emulate/core/index.js +0 -8
- package/dist/emulate/core/index.js.map +0 -1
- package/dist/emulate/core/jwt.d.ts +0 -28
- package/dist/emulate/core/jwt.js +0 -78
- package/dist/emulate/core/jwt.js.map +0 -1
- package/dist/emulate/core/middleware/auth.d.ts +0 -15
- package/dist/emulate/core/middleware/auth.js +0 -17
- package/dist/emulate/core/middleware/auth.js.map +0 -1
- package/dist/emulate/core/middleware/error-handler.d.ts +0 -22
- package/dist/emulate/core/middleware/error-handler.js +0 -72
- package/dist/emulate/core/middleware/error-handler.js.map +0 -1
- package/dist/emulate/core/pagination.d.ts +0 -27
- package/dist/emulate/core/pagination.js +0 -43
- package/dist/emulate/core/pagination.js.map +0 -1
- package/dist/emulate/core/plugin.d.ts +0 -15
- package/dist/emulate/core/plugin.js +0 -2
- package/dist/emulate/core/plugin.js.map +0 -1
- package/dist/emulate/core/server.d.ts +0 -17
- package/dist/emulate/core/server.js +0 -90
- package/dist/emulate/core/server.js.map +0 -1
- package/dist/emulate/core/store.d.ts +0 -44
- package/dist/emulate/core/store.js +0 -169
- package/dist/emulate/core/store.js.map +0 -1
- package/dist/emulate/index.d.ts +0 -25
- package/dist/emulate/index.js +0 -47
- package/dist/emulate/index.js.map +0 -1
- package/dist/emulate/workos/constants.d.ts +0 -56
- package/dist/emulate/workos/constants.js +0 -56
- package/dist/emulate/workos/constants.js.map +0 -1
- package/dist/emulate/workos/entities.d.ts +0 -360
- package/dist/emulate/workos/entities.js +0 -2
- package/dist/emulate/workos/entities.js.map +0 -1
- package/dist/emulate/workos/event-bus.d.ts +0 -17
- package/dist/emulate/workos/event-bus.js +0 -70
- package/dist/emulate/workos/event-bus.js.map +0 -1
- package/dist/emulate/workos/helpers.d.ts +0 -72
- package/dist/emulate/workos/helpers.js +0 -211
- package/dist/emulate/workos/helpers.js.map +0 -1
- package/dist/emulate/workos/index.d.ts +0 -93
- package/dist/emulate/workos/index.js +0 -326
- package/dist/emulate/workos/index.js.map +0 -1
- package/dist/emulate/workos/role-helpers.d.ts +0 -21
- package/dist/emulate/workos/role-helpers.js +0 -130
- package/dist/emulate/workos/role-helpers.js.map +0 -1
- package/dist/emulate/workos/routes/api-keys.d.ts +0 -2
- package/dist/emulate/workos/routes/api-keys.js +0 -32
- package/dist/emulate/workos/routes/api-keys.js.map +0 -1
- package/dist/emulate/workos/routes/audit-logs.d.ts +0 -2
- package/dist/emulate/workos/routes/audit-logs.js +0 -104
- package/dist/emulate/workos/routes/audit-logs.js.map +0 -1
- package/dist/emulate/workos/routes/auth-challenges.d.ts +0 -2
- package/dist/emulate/workos/routes/auth-challenges.js +0 -51
- package/dist/emulate/workos/routes/auth-challenges.js.map +0 -1
- package/dist/emulate/workos/routes/auth-factors.d.ts +0 -2
- package/dist/emulate/workos/routes/auth-factors.js +0 -51
- package/dist/emulate/workos/routes/auth-factors.js.map +0 -1
- package/dist/emulate/workos/routes/auth.d.ts +0 -2
- package/dist/emulate/workos/routes/auth.js +0 -350
- package/dist/emulate/workos/routes/auth.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-checks.d.ts +0 -10
- package/dist/emulate/workos/routes/authorization-checks.js +0 -123
- package/dist/emulate/workos/routes/authorization-checks.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-org-roles.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-org-roles.js +0 -64
- package/dist/emulate/workos/routes/authorization-org-roles.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-permissions.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-permissions.js +0 -67
- package/dist/emulate/workos/routes/authorization-permissions.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-resources.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-resources.js +0 -117
- package/dist/emulate/workos/routes/authorization-resources.js.map +0 -1
- package/dist/emulate/workos/routes/authorization-roles.d.ts +0 -2
- package/dist/emulate/workos/routes/authorization-roles.js +0 -13
- package/dist/emulate/workos/routes/authorization-roles.js.map +0 -1
- package/dist/emulate/workos/routes/config.d.ts +0 -2
- package/dist/emulate/workos/routes/config.js +0 -57
- package/dist/emulate/workos/routes/config.js.map +0 -1
- package/dist/emulate/workos/routes/connect.d.ts +0 -2
- package/dist/emulate/workos/routes/connect.js +0 -65
- package/dist/emulate/workos/routes/connect.js.map +0 -1
- package/dist/emulate/workos/routes/connections.d.ts +0 -2
- package/dist/emulate/workos/routes/connections.js +0 -73
- package/dist/emulate/workos/routes/connections.js.map +0 -1
- package/dist/emulate/workos/routes/data-integrations.d.ts +0 -2
- package/dist/emulate/workos/routes/data-integrations.js +0 -55
- package/dist/emulate/workos/routes/data-integrations.js.map +0 -1
- package/dist/emulate/workos/routes/directories.d.ts +0 -2
- package/dist/emulate/workos/routes/directories.js +0 -90
- package/dist/emulate/workos/routes/directories.js.map +0 -1
- package/dist/emulate/workos/routes/email-verification.d.ts +0 -2
- package/dist/emulate/workos/routes/email-verification.js +0 -49
- package/dist/emulate/workos/routes/email-verification.js.map +0 -1
- package/dist/emulate/workos/routes/events.d.ts +0 -2
- package/dist/emulate/workos/routes/events.js +0 -18
- package/dist/emulate/workos/routes/events.js.map +0 -1
- package/dist/emulate/workos/routes/feature-flags.d.ts +0 -2
- package/dist/emulate/workos/routes/feature-flags.js +0 -103
- package/dist/emulate/workos/routes/feature-flags.js.map +0 -1
- package/dist/emulate/workos/routes/invitations.d.ts +0 -2
- package/dist/emulate/workos/routes/invitations.js +0 -122
- package/dist/emulate/workos/routes/invitations.js.map +0 -1
- package/dist/emulate/workos/routes/legacy-mfa.d.ts +0 -2
- package/dist/emulate/workos/routes/legacy-mfa.js +0 -75
- package/dist/emulate/workos/routes/legacy-mfa.js.map +0 -1
- package/dist/emulate/workos/routes/magic-auth.d.ts +0 -2
- package/dist/emulate/workos/routes/magic-auth.js +0 -32
- package/dist/emulate/workos/routes/magic-auth.js.map +0 -1
- package/dist/emulate/workos/routes/memberships.d.ts +0 -2
- package/dist/emulate/workos/routes/memberships.js +0 -114
- package/dist/emulate/workos/routes/memberships.js.map +0 -1
- package/dist/emulate/workos/routes/organization-domains.d.ts +0 -2
- package/dist/emulate/workos/routes/organization-domains.js +0 -58
- package/dist/emulate/workos/routes/organization-domains.js.map +0 -1
- package/dist/emulate/workos/routes/organizations.d.ts +0 -2
- package/dist/emulate/workos/routes/organizations.js +0 -131
- package/dist/emulate/workos/routes/organizations.js.map +0 -1
- package/dist/emulate/workos/routes/password-reset.d.ts +0 -2
- package/dist/emulate/workos/routes/password-reset.js +0 -61
- package/dist/emulate/workos/routes/password-reset.js.map +0 -1
- package/dist/emulate/workos/routes/pipes.d.ts +0 -2
- package/dist/emulate/workos/routes/pipes.js +0 -82
- package/dist/emulate/workos/routes/pipes.js.map +0 -1
- package/dist/emulate/workos/routes/portal.d.ts +0 -2
- package/dist/emulate/workos/routes/portal.js +0 -18
- package/dist/emulate/workos/routes/portal.js.map +0 -1
- package/dist/emulate/workos/routes/radar.d.ts +0 -2
- package/dist/emulate/workos/routes/radar.js +0 -41
- package/dist/emulate/workos/routes/radar.js.map +0 -1
- package/dist/emulate/workos/routes/sessions.d.ts +0 -2
- package/dist/emulate/workos/routes/sessions.js +0 -51
- package/dist/emulate/workos/routes/sessions.js.map +0 -1
- package/dist/emulate/workos/routes/sso.d.ts +0 -2
- package/dist/emulate/workos/routes/sso.js +0 -161
- package/dist/emulate/workos/routes/sso.js.map +0 -1
- package/dist/emulate/workos/routes/user-features.d.ts +0 -2
- package/dist/emulate/workos/routes/user-features.js +0 -50
- package/dist/emulate/workos/routes/user-features.js.map +0 -1
- package/dist/emulate/workos/routes/users.d.ts +0 -2
- package/dist/emulate/workos/routes/users.js +0 -129
- package/dist/emulate/workos/routes/users.js.map +0 -1
- package/dist/emulate/workos/routes/webhook-endpoints.d.ts +0 -2
- package/dist/emulate/workos/routes/webhook-endpoints.js +0 -67
- package/dist/emulate/workos/routes/webhook-endpoints.js.map +0 -1
- package/dist/emulate/workos/routes/widgets.d.ts +0 -2
- package/dist/emulate/workos/routes/widgets.js +0 -27
- package/dist/emulate/workos/routes/widgets.js.map +0 -1
- package/dist/emulate/workos/store.d.ts +0 -48
- package/dist/emulate/workos/store.js +0 -102
- package/dist/emulate/workos/store.js.map +0 -1
- package/dist/emulate/workos/webhook-signer.d.ts +0 -1
- package/dist/emulate/workos/webhook-signer.js +0 -8
- package/dist/emulate/workos/webhook-signer.js.map +0 -1
- package/dist/gen-routes-lib.spec.ts +0 -659
- package/dist/gen-routes-lib.ts +0 -647
- package/dist/gen-routes.ts +0 -96
- package/dist/utils/clack-utils.js.map +0 -1
- package/dist/utils/clack.d.ts +0 -5
- package/dist/utils/clack.js +0 -34
- package/dist/utils/clack.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/react-router/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/react-router/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtH,MAAM,4BAA4B,GAAG,OAAO,CAAC;AAE7C,MAAM,CAAC,MAAM,MAAM,GAAoB;IACrC,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,8DAA8D;QACvE,yBAAyB,EAAE,8DAA8D;QACzF,SAAS,EAAE,6BAA6B;QACxC,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;YACjD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACrD,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,cAAc;QAClC,UAAU,EAAE,CAAC,WAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE,WAAW,CAAC;QAChF,gBAAgB,EAAE,2BAA2B;KAC9C;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACjD,cAAc,EAAE,MAAM;YACtB,gBAAgB,EAAE,QAAQ;SAC3B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,CAAC,OAAY,EAAE,EAAE;YACxB,MAAM,UAAU,GAAG,OAAO,CAAC,UAA6B,CAAC;YACzD,OAAO,EAAE,UAAU,EAAE,UAAU,IAAI,SAAS,EAAE,CAAC;QACjD,CAAC;KACF;IAED,OAAO,EAAE;QACP,yBAAyB,EAAE,CAAC,OAAY,EAAE,EAAE;YAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAA6B,CAAC;YACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE7E,MAAM,cAAc,GAAoC;gBACtD,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,sBAAsB;gBAC5C,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,gCAAgC;gBAChE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,2BAA2B;gBACtD,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,kCAAkC;aACrE,CAAC;YAEF,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;YAE3F,OAAO,CAAC,gBAAgB,QAAQ,EAAE,EAAE,sBAAsB,WAAW,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,qCAAqC;QACrD,eAAe,EAAE,CAAC,OAAY,EAAE,EAAE;YAChC,MAAM,UAAU,GAAG,OAAO,CAAC,UAA6B,CAAC;YACzD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;YAClF,OAAO;gBACL,iDAAiD,QAAQ,GAAG;gBAC5D,uCAAuC;gBACvC,iDAAiD;aAClD,CAAC;QACJ,CAAC;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,sDAAsD;YACtD,yDAAyD;SAC1D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAyB;IACjD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAE1E,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACzD,IAAI,cAAc,IAAI,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,4BAA4B,CAAC,EAAE,CAAC;YAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,yBAAyB,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAErF,EAAE,CAAC,GAAG,CAAC,IAAI,CACT,yDAAyD,kBAAkB,6BAA6B,4BAA4B,iDAAiD,CACtL,CAAC;YACF,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnE,EAAE,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC7D,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACxE,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["/* React Router integration — auto-discovered by registry */\nimport type { FrameworkConfig } from '../../lib/framework-config.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { enableDebugLogs } from '../../utils/debug.js';\nimport { getPackageVersion } from '../../utils/package-json.js';\nimport { getPackageDotJson } from '../../utils/ui-utils.js';\nimport ui from '../../utils/ui.js';\nimport chalk from 'chalk';\nimport * as semver from 'semver';\nimport { getReactRouterMode, getReactRouterModeName, getReactRouterVersionBucket, ReactRouterMode } from './utils.js';\n\nconst MINIMUM_REACT_ROUTER_VERSION = '6.0.0';\n\nexport const config: FrameworkConfig = {\n metadata: {\n name: 'React Router',\n integration: 'react-router',\n docsUrl: 'https://workos.com/docs/user-management/authkit/react-router',\n unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/react-router',\n skillName: 'workos-authkit-react-router',\n language: 'javascript',\n stability: 'stable',\n priority: 80,\n gatherContext: async (options: InstallerOptions) => {\n const routerMode = await getReactRouterMode(options);\n return { routerMode };\n },\n },\n\n detection: {\n packageName: 'react-router',\n packageDisplayName: 'React Router',\n getVersion: (packageJson: any) => getPackageVersion('react-router', packageJson),\n getVersionBucket: getReactRouterVersionBucket,\n },\n\n environment: {\n uploadToHosting: false,\n requiresApiKey: true,\n getEnvVars: (apiKey: string, clientId: string) => ({\n WORKOS_API_KEY: apiKey,\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: (context: any) => {\n const routerMode = context.routerMode as ReactRouterMode;\n return { routerMode: routerMode || 'unknown' };\n },\n },\n\n prompts: {\n getAdditionalContextLines: (context: any) => {\n const routerMode = context.routerMode as ReactRouterMode;\n const modeName = routerMode ? getReactRouterModeName(routerMode) : 'unknown';\n\n const frameworkIdMap: Record<ReactRouterMode, string> = {\n [ReactRouterMode.V6]: 'react-react-router-6',\n [ReactRouterMode.V7_FRAMEWORK]: 'react-react-router-7-framework',\n [ReactRouterMode.V7_DATA]: 'react-react-router-7-data',\n [ReactRouterMode.V7_DECLARATIVE]: 'react-react-router-7-declarative',\n };\n\n const frameworkId = routerMode ? frameworkIdMap[routerMode] : ReactRouterMode.V7_FRAMEWORK;\n\n return [`Router mode: ${modeName}`, `Framework docs ID: ${frameworkId}`];\n },\n },\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: (context: any) => {\n const routerMode = context.routerMode as ReactRouterMode;\n const modeName = routerMode ? getReactRouterModeName(routerMode) : 'React Router';\n return [\n `Analyzed your React Router project structure (${modeName})`,\n `Created and configured WorkOS AuthKit`,\n `Integrated authentication into your application`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your development server to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\nexport async function run(options: InstallerOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n const packageJson = await getPackageDotJson(options);\n const reactRouterVersion = getPackageVersion('react-router', packageJson);\n\n if (reactRouterVersion) {\n const coercedVersion = semver.coerce(reactRouterVersion);\n if (coercedVersion && semver.lt(coercedVersion, MINIMUM_REACT_ROUTER_VERSION)) {\n const docsUrl = config.metadata.unsupportedVersionDocsUrl ?? config.metadata.docsUrl;\n\n ui.log.warn(\n `Sorry: the installer can't help you with React Router ${reactRouterVersion}. Upgrade to React Router ${MINIMUM_REACT_ROUTER_VERSION} or later, or check out the manual setup guide.`,\n );\n ui.log.info(`Setup React Router manually: ${chalk.cyan(docsUrl)}`);\n ui.outro('WorkOS AuthKit installer will see you next time!');\n return '';\n }\n }\n\n const { runAgentInstaller } = await import('../../lib/agent-runner.js');\n return runAgentInstaller(config, options);\n}\n"]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { major } from 'semver';
|
|
2
2
|
import fg from 'fast-glob';
|
|
3
|
-
import { abortIfCancelled, getPackageDotJson } from '../../utils/
|
|
4
|
-
import
|
|
3
|
+
import { abortIfCancelled, getPackageDotJson } from '../../utils/ui-utils.js';
|
|
4
|
+
import ui from '../../utils/ui.js';
|
|
5
5
|
import { getVersionBucket } from '../../utils/semver.js';
|
|
6
6
|
import { IGNORE_PATTERNS } from '../../lib/constants.js';
|
|
7
7
|
import { getPackageVersion } from '../../utils/package-json.js';
|
|
8
|
+
import { isPromptAllowed } from '../../utils/interaction-mode.js';
|
|
8
9
|
import chalk from 'chalk';
|
|
9
10
|
import * as fs from 'node:fs';
|
|
10
11
|
import * as path from 'node:path';
|
|
@@ -69,13 +70,24 @@ async function hasDeclarativeRouter({ installDir }) {
|
|
|
69
70
|
}
|
|
70
71
|
return false;
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Non-interactive runs cannot answer the mode prompt, so warn and fall back to
|
|
75
|
+
* the most common mode instead of aborting.
|
|
76
|
+
*/
|
|
77
|
+
function defaultModeNonInteractive() {
|
|
78
|
+
ui.log.warn('Could not determine the React Router mode. Defaulting to v7 Framework mode. ' +
|
|
79
|
+
'Run in an interactive terminal to choose a different mode.');
|
|
80
|
+
return ReactRouterMode.V7_FRAMEWORK;
|
|
81
|
+
}
|
|
72
82
|
export async function getReactRouterMode(options) {
|
|
73
83
|
const { installDir } = options;
|
|
74
84
|
const packageJson = await getPackageDotJson(options);
|
|
75
85
|
const reactRouterVersion = getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);
|
|
76
86
|
if (!reactRouterVersion) {
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
if (!isPromptAllowed())
|
|
88
|
+
return defaultModeNonInteractive();
|
|
89
|
+
ui.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
90
|
+
const result = await abortIfCancelled(ui.select({
|
|
79
91
|
message: 'What React Router version and mode are you using?',
|
|
80
92
|
options: [
|
|
81
93
|
{ label: 'React Router v6', value: ReactRouterMode.V6 },
|
|
@@ -89,27 +101,29 @@ export async function getReactRouterMode(options) {
|
|
|
89
101
|
const coercedVersion = semver.coerce(reactRouterVersion);
|
|
90
102
|
const majorVersion = coercedVersion ? major(coercedVersion) : null;
|
|
91
103
|
if (majorVersion === 6) {
|
|
92
|
-
|
|
104
|
+
ui.log.info('Detected React Router v6');
|
|
93
105
|
return ReactRouterMode.V6;
|
|
94
106
|
}
|
|
95
107
|
if (majorVersion === 7) {
|
|
96
108
|
const hasConfig = await hasReactRouterConfig({ installDir });
|
|
97
109
|
if (hasConfig) {
|
|
98
|
-
|
|
110
|
+
ui.log.info('Detected React Router v7 - Framework mode');
|
|
99
111
|
return ReactRouterMode.V7_FRAMEWORK;
|
|
100
112
|
}
|
|
101
113
|
const hasDataMode = await hasCreateBrowserRouter({ installDir });
|
|
102
114
|
if (hasDataMode) {
|
|
103
|
-
|
|
115
|
+
ui.log.info('Detected React Router v7 - Data mode');
|
|
104
116
|
return ReactRouterMode.V7_DATA;
|
|
105
117
|
}
|
|
106
118
|
const hasDeclarative = await hasDeclarativeRouter({ installDir });
|
|
107
119
|
if (hasDeclarative) {
|
|
108
|
-
|
|
120
|
+
ui.log.info('Detected React Router v7 - Declarative mode');
|
|
109
121
|
return ReactRouterMode.V7_DECLARATIVE;
|
|
110
122
|
}
|
|
111
|
-
|
|
112
|
-
|
|
123
|
+
if (!isPromptAllowed())
|
|
124
|
+
return defaultModeNonInteractive();
|
|
125
|
+
ui.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
126
|
+
const result = await abortIfCancelled(ui.select({
|
|
113
127
|
message: 'What React Router v7 mode are you using?',
|
|
114
128
|
options: [
|
|
115
129
|
{ label: 'Framework mode', value: ReactRouterMode.V7_FRAMEWORK },
|
|
@@ -119,8 +133,10 @@ export async function getReactRouterMode(options) {
|
|
|
119
133
|
}), 'react-router');
|
|
120
134
|
return result;
|
|
121
135
|
}
|
|
122
|
-
|
|
123
|
-
|
|
136
|
+
if (!isPromptAllowed())
|
|
137
|
+
return defaultModeNonInteractive();
|
|
138
|
+
ui.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);
|
|
139
|
+
const result = await abortIfCancelled(ui.select({
|
|
124
140
|
message: 'What React Router version and mode are you using?',
|
|
125
141
|
options: [
|
|
126
142
|
{ label: 'React Router v6', value: ReactRouterMode.V6 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/integrations/react-router/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,4BAAS,CAAA;IACT,gDAA6B,CAAA;IAC7B,sCAAmB,CAAA;IACnB,oDAAiC,CAAA;AACnC,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA2B;IACrE,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,EAAE,UAAU,EAAwC;IACtF,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,yCAAyC,EAAE;QACxE,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,eAAe;KACxB,CAAC,CAAC;IACH,OAAO,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,EAAE,UAAU,EAAwC;IACxF,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,uBAAuB,EAAE;QACpD,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,eAAe;KACxB,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,EAAE,UAAU,EAAwC;IACtF,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,uBAAuB,EAAE;QACpD,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,eAAe;KACxB,CAAC,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,IACE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAClC,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;oBAChC,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAC/F,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAyB;IAChE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAE/B,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,kBAAkB,GACtB,iBAAiB,CAAC,kBAAkB,EAAE,WAAW,CAAC,IAAI,iBAAiB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAEvG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAoB,MAAM,gBAAgB,CACpD,KAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,mDAAmD;YAC5D,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,EAAE;gBACvD,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,EAAE;gBAClF,EAAE,KAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE;gBACxE,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;aACvF;SACF,CAAC,EACF,cAAc,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC3C,OAAO,eAAe,CAAC,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC5D,OAAO,eAAe,CAAC,YAAY,CAAC;QACtC,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACvD,OAAO,eAAe,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QAClE,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;YAC9D,OAAO,eAAe,CAAC,cAAc,CAAC;QACxC,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAoB,MAAM,gBAAgB,CACpD,KAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,0CAA0C;YACnD,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,EAAE;gBAChE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE;gBACtD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;aACrE;SACF,CAAC,EACF,cAAc,CACf,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,EAAE,CAAC,CAAC;IAC5G,MAAM,MAAM,GAAoB,MAAM,gBAAgB,CACpD,KAAK,CAAC,MAAM,CAAC;QACX,OAAO,EAAE,mDAAmD;QAC5D,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,EAAE;YACvD,EAAE,KAAK,EAAE,kCAAkC,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,EAAE;YAClF,EAAE,KAAK,EAAE,6BAA6B,EAAE,KAAK,EAAE,eAAe,CAAC,OAAO,EAAE;YACxE,EAAE,KAAK,EAAE,oCAAoC,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;SACvF;KACF,CAAC,EACF,cAAc,CACf,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAqB;IAC1D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,eAAe,CAAC,EAAE;YACrB,OAAO,IAAI,CAAC;QACd,KAAK,eAAe,CAAC,YAAY;YAC/B,OAAO,mBAAmB,CAAC;QAC7B,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,cAAc,CAAC;QACxB,KAAK,eAAe,CAAC,cAAc;YACjC,OAAO,qBAAqB,CAAC;IACjC,CAAC;AACH,CAAC","sourcesContent":["import { major } from 'semver';\nimport fg from 'fast-glob';\nimport { abortIfCancelled, getPackageDotJson } from '../../utils/clack-utils.js';\nimport clack from '../../utils/clack.js';\nimport { getVersionBucket } from '../../utils/semver.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { IGNORE_PATTERNS } from '../../lib/constants.js';\nimport { getPackageVersion } from '../../utils/package-json.js';\nimport chalk from 'chalk';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as semver from 'semver';\n\nexport enum ReactRouterMode {\n V6 = 'v6',\n V7_FRAMEWORK = 'v7-framework',\n V7_DATA = 'v7-data',\n V7_DECLARATIVE = 'v7-declarative',\n}\n\nexport function getReactRouterVersionBucket(version: string | undefined): string {\n return getVersionBucket(version, 6);\n}\n\nasync function hasReactRouterConfig({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const configMatches = await fg('**/react-router.config.@(ts|js|tsx|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n return configMatches.length > 0;\n}\n\nasync function hasCreateBrowserRouter({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n for (const file of sourceFiles) {\n try {\n const filePath = path.join(installDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n if (content.includes('createBrowserRouter')) {\n return true;\n }\n } catch {\n continue;\n }\n }\n return false;\n}\n\nasync function hasDeclarativeRouter({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n for (const file of sourceFiles) {\n try {\n const filePath = path.join(installDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n if (\n content.includes('<BrowserRouter') ||\n (content.includes('BrowserRouter') &&\n (content.includes('from \"react-router-dom\"') || content.includes(\"from 'react-router-dom'\")))\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n return false;\n}\n\nexport async function getReactRouterMode(options: InstallerOptions): Promise<ReactRouterMode> {\n const { installDir } = options;\n\n const packageJson = await getPackageDotJson(options);\n const reactRouterVersion =\n getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);\n\n if (!reactRouterVersion) {\n clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n clack.select({\n message: 'What React Router version and mode are you using?',\n options: [\n { label: 'React Router v6', value: ReactRouterMode.V6 },\n { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n }\n\n const coercedVersion = semver.coerce(reactRouterVersion);\n const majorVersion = coercedVersion ? major(coercedVersion) : null;\n\n if (majorVersion === 6) {\n clack.log.info('Detected React Router v6');\n return ReactRouterMode.V6;\n }\n\n if (majorVersion === 7) {\n const hasConfig = await hasReactRouterConfig({ installDir });\n if (hasConfig) {\n clack.log.info('Detected React Router v7 - Framework mode');\n return ReactRouterMode.V7_FRAMEWORK;\n }\n\n const hasDataMode = await hasCreateBrowserRouter({ installDir });\n if (hasDataMode) {\n clack.log.info('Detected React Router v7 - Data mode');\n return ReactRouterMode.V7_DATA;\n }\n\n const hasDeclarative = await hasDeclarativeRouter({ installDir });\n if (hasDeclarative) {\n clack.log.info('Detected React Router v7 - Declarative mode');\n return ReactRouterMode.V7_DECLARATIVE;\n }\n\n clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n clack.select({\n message: 'What React Router v7 mode are you using?',\n options: [\n { label: 'Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n }\n\n clack.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n clack.select({\n message: 'What React Router version and mode are you using?',\n options: [\n { label: 'React Router v6', value: ReactRouterMode.V6 },\n { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n}\n\nexport function getReactRouterModeName(mode: ReactRouterMode): string {\n switch (mode) {\n case ReactRouterMode.V6:\n return 'v6';\n case ReactRouterMode.V7_FRAMEWORK:\n return 'v7 Framework mode';\n case ReactRouterMode.V7_DATA:\n return 'v7 Data mode';\n case ReactRouterMode.V7_DECLARATIVE:\n return 'v7 Declarative mode';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/integrations/react-router/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { major } from 'semver';\nimport fg from 'fast-glob';\nimport { abortIfCancelled, getPackageDotJson } from '../../utils/ui-utils.js';\nimport ui from '../../utils/ui.js';\nimport { getVersionBucket } from '../../utils/semver.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { IGNORE_PATTERNS } from '../../lib/constants.js';\nimport { getPackageVersion } from '../../utils/package-json.js';\nimport { isPromptAllowed } from '../../utils/interaction-mode.js';\nimport chalk from 'chalk';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as semver from 'semver';\n\nexport enum ReactRouterMode {\n V6 = 'v6',\n V7_FRAMEWORK = 'v7-framework',\n V7_DATA = 'v7-data',\n V7_DECLARATIVE = 'v7-declarative',\n}\n\nexport function getReactRouterVersionBucket(version: string | undefined): string {\n return getVersionBucket(version, 6);\n}\n\nasync function hasReactRouterConfig({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const configMatches = await fg('**/react-router.config.@(ts|js|tsx|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n return configMatches.length > 0;\n}\n\nasync function hasCreateBrowserRouter({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n for (const file of sourceFiles) {\n try {\n const filePath = path.join(installDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n if (content.includes('createBrowserRouter')) {\n return true;\n }\n } catch {\n continue;\n }\n }\n return false;\n}\n\nasync function hasDeclarativeRouter({ installDir }: Pick<InstallerOptions, 'installDir'>): Promise<boolean> {\n const sourceFiles = await fg('**/*.@(ts|tsx|js|jsx)', {\n dot: true,\n cwd: installDir,\n ignore: IGNORE_PATTERNS,\n });\n\n for (const file of sourceFiles) {\n try {\n const filePath = path.join(installDir, file);\n const content = fs.readFileSync(filePath, 'utf-8');\n if (\n content.includes('<BrowserRouter') ||\n (content.includes('BrowserRouter') &&\n (content.includes('from \"react-router-dom\"') || content.includes(\"from 'react-router-dom'\")))\n ) {\n return true;\n }\n } catch {\n continue;\n }\n }\n return false;\n}\n\n/**\n * Non-interactive runs cannot answer the mode prompt, so warn and fall back to\n * the most common mode instead of aborting.\n */\nfunction defaultModeNonInteractive(): ReactRouterMode {\n ui.log.warn(\n 'Could not determine the React Router mode. Defaulting to v7 Framework mode. ' +\n 'Run in an interactive terminal to choose a different mode.',\n );\n return ReactRouterMode.V7_FRAMEWORK;\n}\n\nexport async function getReactRouterMode(options: InstallerOptions): Promise<ReactRouterMode> {\n const { installDir } = options;\n\n const packageJson = await getPackageDotJson(options);\n const reactRouterVersion =\n getPackageVersion('react-router-dom', packageJson) || getPackageVersion('react-router', packageJson);\n\n if (!reactRouterVersion) {\n if (!isPromptAllowed()) return defaultModeNonInteractive();\n ui.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n ui.select({\n message: 'What React Router version and mode are you using?',\n options: [\n { label: 'React Router v6', value: ReactRouterMode.V6 },\n { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n }\n\n const coercedVersion = semver.coerce(reactRouterVersion);\n const majorVersion = coercedVersion ? major(coercedVersion) : null;\n\n if (majorVersion === 6) {\n ui.log.info('Detected React Router v6');\n return ReactRouterMode.V6;\n }\n\n if (majorVersion === 7) {\n const hasConfig = await hasReactRouterConfig({ installDir });\n if (hasConfig) {\n ui.log.info('Detected React Router v7 - Framework mode');\n return ReactRouterMode.V7_FRAMEWORK;\n }\n\n const hasDataMode = await hasCreateBrowserRouter({ installDir });\n if (hasDataMode) {\n ui.log.info('Detected React Router v7 - Data mode');\n return ReactRouterMode.V7_DATA;\n }\n\n const hasDeclarative = await hasDeclarativeRouter({ installDir });\n if (hasDeclarative) {\n ui.log.info('Detected React Router v7 - Declarative mode');\n return ReactRouterMode.V7_DECLARATIVE;\n }\n\n if (!isPromptAllowed()) return defaultModeNonInteractive();\n ui.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n ui.select({\n message: 'What React Router v7 mode are you using?',\n options: [\n { label: 'Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n }\n\n if (!isPromptAllowed()) return defaultModeNonInteractive();\n ui.log.info(`Learn more about React Router modes: ${chalk.cyan('https://reactrouter.com/start/modes')}`);\n const result: ReactRouterMode = await abortIfCancelled(\n ui.select({\n message: 'What React Router version and mode are you using?',\n options: [\n { label: 'React Router v6', value: ReactRouterMode.V6 },\n { label: 'React Router v7 - Framework mode', value: ReactRouterMode.V7_FRAMEWORK },\n { label: 'React Router v7 - Data mode', value: ReactRouterMode.V7_DATA },\n { label: 'React Router v7 - Declarative mode', value: ReactRouterMode.V7_DECLARATIVE },\n ],\n }),\n 'react-router',\n );\n return result;\n}\n\nexport function getReactRouterModeName(mode: ReactRouterMode): string {\n switch (mode) {\n case ReactRouterMode.V6:\n return 'v6';\n case ReactRouterMode.V7_FRAMEWORK:\n return 'v7 Framework mode';\n case ReactRouterMode.V7_DATA:\n return 'v7 Data mode';\n case ReactRouterMode.V7_DECLARATIVE:\n return 'v7 Declarative mode';\n }\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import { SPINNER_MESSAGE } from '../../lib/framework-config.js';
|
|
|
3
3
|
import { analytics } from '../../utils/analytics.js';
|
|
4
4
|
import { INSTALLER_INTERACTION_EVENT_NAME } from '../../lib/constants.js';
|
|
5
5
|
import { initializeAgent, runAgent } from '../../lib/agent-interface.js';
|
|
6
|
-
import { getOrAskForWorkOSCredentials } from '../../utils/
|
|
6
|
+
import { getOrAskForWorkOSCredentials } from '../../utils/ui-utils.js';
|
|
7
7
|
import { autoConfigureWorkOSEnvironment } from '../../lib/workos-management.js';
|
|
8
8
|
import { getReference } from '@workos/skills';
|
|
9
9
|
export const config = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/ruby/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/ruby/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* Ruby/Rails integration — auto-discovered by registry */\nimport type { FrameworkConfig } from '../../lib/framework-config.js';\nimport type { InstallerOptions } from '../../utils/types.js';\nimport { enableDebugLogs } from '../../utils/debug.js';\nimport { SPINNER_MESSAGE } from '../../lib/framework-config.js';\nimport { analytics } from '../../utils/analytics.js';\nimport { INSTALLER_INTERACTION_EVENT_NAME } from '../../lib/constants.js';\nimport { initializeAgent, runAgent } from '../../lib/agent-interface.js';\nimport { getOrAskForWorkOSCredentials } from '../../utils/ui-utils.js';\nimport { autoConfigureWorkOSEnvironment } from '../../lib/workos-management.js';\nimport { getReference } from '@workos/skills';\n\nexport const config: FrameworkConfig = {\n metadata: {\n name: 'Ruby (Rails)',\n integration: 'ruby',\n docsUrl: 'https://workos.com/docs/authkit/vanilla/ruby',\n skillName: 'workos-ruby',\n language: 'ruby',\n stability: 'experimental',\n priority: 55,\n packageManager: 'bundle',\n manifestFile: 'Gemfile',\n },\n\n detection: {\n packageName: 'rails',\n packageDisplayName: 'Rails',\n getVersion: () => undefined,\n },\n\n environment: {\n uploadToHosting: false,\n requiresApiKey: true,\n getEnvVars: (apiKey: string, clientId: string) => ({\n WORKOS_API_KEY: apiKey,\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {},\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: () => [\n 'Analyzed your Rails project structure',\n 'Installed and configured the WorkOS Ruby SDK',\n 'Created authentication controller with login, callback, and logout',\n 'Added authentication routes to config/routes.rb',\n ],\n getOutroNextSteps: () => [\n 'Start your Rails server with `rails server` to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\n/**\n * Custom run function for Ruby/Rails — bypasses runAgentInstaller\n * since that assumes a JS project (package.json, node_modules, .env.local).\n */\nexport async function run(options: InstallerOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n options.emitter?.emit('status', {\n message: `Setting up WorkOS AuthKit for ${config.metadata.name}`,\n });\n\n analytics.capture(INSTALLER_INTERACTION_EVENT_NAME, {\n action: 'started agent integration',\n integration: config.metadata.integration,\n });\n\n // Get WorkOS credentials\n const { apiKey, clientId: _clientId } = await getOrAskForWorkOSCredentials(\n options,\n config.environment.requiresApiKey,\n );\n\n // Auto-configure WorkOS environment (redirect URI, CORS, homepage) if not already done\n const callerHandledConfig = Boolean(options.apiKey || options.clientId);\n if (!callerHandledConfig && apiKey) {\n const port = 3000; // Rails default\n await autoConfigureWorkOSEnvironment(apiKey, config.metadata.integration, port, {\n homepageUrl: options.homepageUrl,\n redirectUri: options.redirectUri,\n });\n }\n\n // Build prompt for the agent\n const redirectUri = options.redirectUri || 'http://localhost:3000/auth/callback';\n const refContent = await getReference('workos-ruby');\n const prompt = `You are integrating WorkOS AuthKit into this Ruby on Rails application.\n\n## Project Context\n\n- Framework: Ruby (Rails)\n- Language: Ruby\n\n## Environment\n\nThe following environment variables are needed (create a .env file if one does not exist):\n- WORKOS_API_KEY\n- WORKOS_CLIENT_ID\n- WORKOS_REDIRECT_URI=${redirectUri}\n\n## Integration Instructions\n\n${refContent}\n\nReport your progress using [STATUS] prefixes.\n\nBegin integration now.`;\n\n // Initialize and run agent\n const agent = await initializeAgent(\n {\n workingDirectory: options.installDir,\n workOSApiKey: apiKey,\n workOSApiHost: 'https://api.workos.com',\n },\n options,\n );\n\n const agentResult = await runAgent(\n agent,\n prompt,\n options,\n {\n spinnerMessage: SPINNER_MESSAGE,\n successMessage: config.ui.successMessage,\n errorMessage: 'Integration failed',\n },\n options.emitter,\n );\n\n if (agentResult.error) {\n await analytics.shutdown('error');\n const message = agentResult.errorMessage || agentResult.error;\n throw new Error(message);\n }\n\n // Build completion summary\n const changes = config.ui.getOutroChanges({});\n const nextSteps = config.ui.getOutroNextSteps({});\n\n const lines: string[] = [\n 'Successfully installed WorkOS AuthKit!',\n '',\n 'What the agent did:',\n ...changes.map((c) => `• ${c}`),\n '',\n 'Next steps:',\n ...nextSteps.map((s) => `• ${s}`),\n '',\n `Learn more: ${config.metadata.docsUrl}`,\n '',\n 'Note: This installer uses an LLM agent to analyze and modify your project. Please review the changes made.',\n ];\n\n await analytics.shutdown('success');\n\n return lines.join('\\n');\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { InstallerAdapter, AdapterConfig } from './types.js';
|
|
2
2
|
import type { InstallerEventEmitter } from '../events.js';
|
|
3
3
|
/**
|
|
4
|
-
* CLI adapter that renders wizard events via
|
|
4
|
+
* CLI adapter that renders wizard events via ui.
|
|
5
5
|
*
|
|
6
6
|
* Subscribes to InstallerEventEmitter and translates events into
|
|
7
|
-
*
|
|
7
|
+
* UI facade operations (logs, spinners, prompts).
|
|
8
8
|
*/
|
|
9
9
|
export declare class CLIAdapter implements InstallerAdapter {
|
|
10
10
|
readonly emitter: InstallerEventEmitter;
|
|
@@ -19,7 +19,9 @@ export declare class CLIAdapter implements InstallerAdapter {
|
|
|
19
19
|
private isPromptActive;
|
|
20
20
|
private pendingLogs;
|
|
21
21
|
private sigIntHandler;
|
|
22
|
-
private
|
|
22
|
+
private promptAbort;
|
|
23
|
+
private lastAgentMessage;
|
|
24
|
+
private lastFileOp;
|
|
23
25
|
constructor(config: AdapterConfig);
|
|
24
26
|
/**
|
|
25
27
|
* Queue a log call if a prompt is active, otherwise execute immediately.
|
|
@@ -29,9 +31,15 @@ export declare class CLIAdapter implements InstallerAdapter {
|
|
|
29
31
|
* Flush any queued logs after prompt completes.
|
|
30
32
|
*/
|
|
31
33
|
private flushPendingLogs;
|
|
34
|
+
/**
|
|
35
|
+
* Run a prompt with the log queue engaged: mark a prompt active so async log
|
|
36
|
+
* events (detection:complete, branch:created, …) buffer instead of scribbling
|
|
37
|
+
* over the question, then release and flush once it resolves. Wraps every
|
|
38
|
+
* prompt handler so the active/flush lifecycle lives in one place.
|
|
39
|
+
*/
|
|
40
|
+
private withPromptActive;
|
|
32
41
|
start(): Promise<void>;
|
|
33
42
|
stop(): Promise<void>;
|
|
34
|
-
private stopAgentUpdates;
|
|
35
43
|
private stopSpinner;
|
|
36
44
|
/** Debug logging - only outputs when debug mode is enabled */
|
|
37
45
|
private debugLog;
|
|
@@ -39,6 +47,14 @@ export declare class CLIAdapter implements InstallerAdapter {
|
|
|
39
47
|
* Helper to subscribe and track handlers for cleanup.
|
|
40
48
|
*/
|
|
41
49
|
private subscribe;
|
|
50
|
+
/**
|
|
51
|
+
* Terminal handler failure. A PromptUnavailableError means we reached a prompt
|
|
52
|
+
* in a context that can't answer it (non-TTY stdin) — the CLIAdapter only runs
|
|
53
|
+
* in human, non-JSON output, so this is always a real human at a broken input,
|
|
54
|
+
* never a JSON stream. Surface a clear message and exit before anything is
|
|
55
|
+
* written, rather than hanging or crashing. Re-throw anything else.
|
|
56
|
+
*/
|
|
57
|
+
private onHandlerError;
|
|
42
58
|
private handleStateEnter;
|
|
43
59
|
private handleStateExit;
|
|
44
60
|
private handleAuthSuccess;
|
|
@@ -52,11 +68,24 @@ export declare class CLIAdapter implements InstallerAdapter {
|
|
|
52
68
|
private handleStagingFetching;
|
|
53
69
|
private handleStagingSuccess;
|
|
54
70
|
private handleEnvCredentialsFound;
|
|
71
|
+
private handleDeviceError;
|
|
72
|
+
private handleDeviceTimeout;
|
|
73
|
+
private handleStagingError;
|
|
55
74
|
private handleGitDirty;
|
|
56
75
|
private handleCredentialsRequest;
|
|
57
76
|
private handleConfigComplete;
|
|
58
77
|
private handleAgentStart;
|
|
59
78
|
private handleAgentProgress;
|
|
79
|
+
/**
|
|
80
|
+
* Render a persistent line above the running spinner: stop the spinner to
|
|
81
|
+
* finalize its line, emit the log, then restart it on the last phase message.
|
|
82
|
+
* Mirrors the existing stop→log and stop→start-new-spinner precedents.
|
|
83
|
+
*/
|
|
84
|
+
private logAboveSpinner;
|
|
85
|
+
private logFileOp;
|
|
86
|
+
private handleFileWrite;
|
|
87
|
+
private handleFileEdit;
|
|
88
|
+
private handleAgentTool;
|
|
60
89
|
private handleValidationStart;
|
|
61
90
|
private handleValidationIssues;
|
|
62
91
|
private handleValidationComplete;
|