workos 0.18.0 → 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 +8 -145
- package/dist/bin.js +129 -50
- package/dist/bin.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.js +6 -6
- 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 +8 -13
- 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.js +7 -16
- package/dist/commands/mcp.js.map +1 -1
- 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/issues.js +3 -2
- package/dist/doctor/issues.js.map +1 -1
- package/dist/doctor/output.js +2 -1
- package/dist/doctor/output.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 +15 -1
- 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/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 +8 -0
- package/dist/lib/constants.js +8 -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 +14 -1
- 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 +6 -0
- package/dist/lib/mcp-clients.js +13 -0
- package/dist/lib/mcp-clients.js.map +1 -1
- package/dist/lib/port-detection.js +19 -13
- package/dist/lib/port-detection.js.map +1 -1
- package/dist/lib/preferences.d.ts +30 -2
- package/dist/lib/preferences.js +34 -8
- package/dist/lib/preferences.js.map +1 -1
- package/dist/lib/run-with-core.js +40 -3
- package/dist/lib/run-with-core.js.map +1 -1
- package/dist/lib/telemetry-notice.d.ts +5 -5
- package/dist/lib/telemetry-notice.js +7 -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 +4 -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/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 +115 -4
- package/dist/utils/help-json.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/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/package.json +5 -13
- 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/lib/mcp-notice.d.ts +0 -72
- package/dist/lib/mcp-notice.js +0 -275
- package/dist/lib/mcp-notice.js.map +0 -1
- 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":"installer-core.js","sourceRoot":"","sources":["../../src/lib/installer-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAqB,MAAM,QAAQ,CAAC;AAiBvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;IACpC,KAAK,EAAE;QACL,OAAO,EAAE,EAA6B;QACtC,KAAK,EAAE,EAA2B;QAClC,MAAM,EAAE,EAA2B;KACpC;IAED,OAAO,EAAE;QACP,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAyB,EAAE,EAAE;YACzD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAyB,EAAE,EAAE;YACxD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,uBAAuB,CAAC;YAClE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACnF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,iBAAiB,CAAC;YAC5D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,qBAAqB,EAAE,MAAM,CAAC;YAC5B,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAE,KAAqD,CAAC,MAAM,EAAE,YAAY,IAAI,KAAK;YACjH,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3B,KAAqD,CAAC,MAAM,EAAE,cAAc,IAAI,KAAK;YACxF,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAE,KAAqD,CAAC,MAAM,EAAE,YAAY,IAAI,KAAK;SAClH,CAAC;QACF,gBAAgB,EAAE,MAAM,CAAC;YACvB,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI;SACvB,CAAC;QACF,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC5E,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;QACD,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAA0B,EAAE,EAAE;YAC7D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,sBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,yBAAyB,CAAC;YACpE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,kBAAkB,EAAE,MAAM,CAAC;YACzB,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,MAAM,SAAS,GAAG,KAAiD,CAAC;gBACpE,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,CAAC;YAC/C,CAAC;YACD,iBAAiB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC/B,MAAM,SAAS,GAAG,KAAiD,CAAC;gBACpE,OAAO,SAAS,CAAC,MAAM,EAAE,WAAW,IAAI,KAAK,CAAC;YAChD,CAAC;SACF,CAAC;QACF,wBAAwB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACxC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACxG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACpC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,uBAAuB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACvC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,iBAAiB,IAAI,MAAM,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,mBAAmB,EAAE,GAAG,EAAE;YACxB,gDAAgD;QAClD,CAAC;QACD,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACrC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,6BAA6B,CAAC;YACxE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,qCAAqC,CAAC;YAChF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAClC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAA4B,EAAE,EAAE;YAC9D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;YACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,qBAAqB,EAAE,MAAM,CAAC;YAC5B,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,KAA+C,CAAC;gBAClE,OAAO,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;YACvC,CAAC;SACF,CAAC;QACF,eAAe,EAAE,MAAM,CAAC;YACtB,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBACxB,MAAM,SAAS,GAAG,KAA8C,CAAC;gBACjE,OAAO,SAAS,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;YAC3C,CAAC;YACD,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,MAAM,SAAS,GAAG,KAA8C,CAAC;gBACjE,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;YACvC,CAAC;SACF,CAAC;QAEF,iBAAiB,EAAE,MAAM,CAAC;YACxB,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBACzB,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;oBAC3C,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC5D,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC;QAEF,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBACnB,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,EAAE,CAAC;oBACrD,OAAO,KAAK,CAAC,KAAK,CAAC;gBACrB,CAAC;gBACD,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBAChF,OAAO,IAAI,KAAK,CAAC,MAAM,CAAE,KAAK,CAAC,KAA8B,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzF,CAAC;gBACD,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACpC,CAAC;SACF,CAAC;QAEF,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,8BAA8B,CAAC;YACzE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,uBAAuB;QACvB,kBAAkB,EAAE,MAAM,CAAC;YACzB,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC1B,MAAM,SAAS,GAAG,KAAwE,CAAC;gBAC3F,OAAO,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;YACvC,CAAC;SACF,CAAC;QACF,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,2BAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,mBAAmB,EAAE,MAAM,CAAC;YAC1B,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,MAAM,SAAS,GAAG,KAAsC,CAAC;gBACzD,OAAO,SAAS,CAAC,MAAM,CAAC;YAC1B,CAAC;SACF,CAAC;QACF,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,iBAAiB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,CAAC;YAC1D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,2BAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,mBAAmB,EAAE,MAAM,CAAC;YAC1B,aAAa,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,MAAM,SAAS,GAAG,KAAsC,CAAC;gBACzD,OAAO,SAAS,CAAC,MAAM,CAAC;YAC1B,CAAC;SACF,CAAC;QACF,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,CAAC;YACxD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,WAAW,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;gBACnB,MAAM,SAAS,GAAG,KAAsC,CAAC;gBACzD,OAAO,SAAS,CAAC,MAAM,CAAC;YAC1B,CAAC;SACF,CAAC;QACF,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,oBAAoB,CAAC;YAC/D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,sBAAsB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC;YAC/C,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;YACrD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,IAAI,wCAAwC,CAAC;YACjF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;KACF;IAED,MAAM,EAAE;QACN,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;QAClE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI;QACxD,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS;QAC/G,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;QAClE,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;QACzE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC1B,8DAA8D;QAC9D,0EAA0E;QAC1E,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAE,KAAqD,CAAC,MAAM,EAAE,YAAY;QAC5G,kBAAkB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YAChC,MAAM,MAAM,GAAI,KAAqD,CAAC,MAAM,CAAC;YAC7E,OAAO,CAAC,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC;QAC1D,CAAC;KACF;IAED,MAAM,EAAE;QACN,mBAAmB,EAAE,WAAW,CAAyC,KAAK,IAAI,EAAE;YAClF,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC,CAAC;QACF,cAAc,EAAE,WAAW,CAAsD,KAAK,IAAI,EAAE;YAC1F,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC,CAAC;QACF,WAAW,EAAE,WAAW,CAA6C,KAAK,IAAI,EAAE;YAC9E,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC,CAAC;QACF,iBAAiB,EAAE,WAAW,CAAiD,KAAK,IAAI,EAAE;YACxF,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC,CAAC;QACF,cAAc,EAAE,WAAW,CAAyC,KAAK,IAAI,EAAE;YAC7E,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC,CAAC;QACF,oBAAoB,EAAE,WAAW,CAA6C,KAAK,IAAI,EAAE;YACvF,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC,CAAC;QACF,QAAQ,EAAE,WAAW,CAAoD,KAAK,IAAI,EAAE;YAClF,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC,CAAC;QACF,8BAA8B;QAC9B,cAAc,EAAE,WAAW,CAAsC,KAAK,IAAI,EAAE;YAC1E,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC,CAAC;QACF,YAAY,EAAE,WAAW,CAA0C,KAAK,IAAI,EAAE;YAC5E,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC,CAAC;QACF,eAAe,EAAE,WAAW,CAAgB,KAAK,IAAI,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC,CAAC;QACF,aAAa,EAAE,WAAW,CAGxB,KAAK,IAAI,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC,CAAC;QACF,uBAAuB,EAAE,WAAW,CAA2B,KAAK,IAAI,EAAE;YACxE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC,CAAC;QACF,sBAAsB;QACtB,WAAW,EAAE,WAAW,CAA0B,KAAK,IAAI,EAAE;YAC3D,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC,CAAC;QACF,YAAY,EAAE,WAAW,CAA6D,KAAK,IAAI,EAAE;YAC/F,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC,CAAC;QACF,sBAAsB;QACtB,aAAa,EAAE,WAAW,CAAiD,KAAK,IAAI,EAAE;YACpF,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC,CAAC;QACF,qBAAqB,EAAE,WAAW,CAAqE,KAAK,IAAI,EAAE;YAChH,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC,CAAC;QACF,aAAa,EAAE,WAAW,CAAyC,KAAK,IAAI,EAAE;YAC5E,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC,CAAC;QACF,qBAAqB,EAAE,WAAW,CAGhC,KAAK,IAAI,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC,CAAC;QACF,UAAU,EAAE,WAAW,CAAwB,KAAK,IAAI,EAAE;YACxD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC,CAAC;QACF,QAAQ,EAAE,WAAW,CAAuD,KAAK,IAAI,EAAE;YACrF,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC,CAAC;KACH;CACF,CAAC,CAAC,aAAa,CAAC;IACf,EAAE,EAAE,WAAW;IACf,OAAO,EAAE,MAAM;IAEf,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,+EAA+E;QAC/E,WAAW,EAAE,SAAS;QACtB,WAAW,EACT,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ;YAC5C,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;YACpE,CAAC,CAAC,SAAS;QACf,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;KACjB,CAAC;IAEF,4DAA4D;IAC5D,EAAE,EAAE;QACF,MAAM,EAAE;YACN,MAAM,EAAE,YAAY;SACrB;KACF;IAED,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,EAAE,EAAE;gBACF,KAAK,EAAE;oBACL;wBACE,MAAM,EAAE,UAAU;wBAClB,KAAK,EAAE,gBAAgB;wBACvB,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;qBACnE;oBACD;wBACE,MAAM,EAAE,gBAAgB;wBACxB,OAAO,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;qBACzE;iBACF;aACF;SACF;QAED,cAAc,EAAE;YACd,KAAK,EAAE,CAAC,kBAAkB,CAAC;YAC3B,MAAM,EAAE;gBACN,EAAE,EAAE,qBAAqB;gBACzB,GAAG,EAAE,qBAAqB;gBAC1B,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtD,MAAM,EAAE;oBACN,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE;wBACP,iBAAiB;wBACjB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;wBAC9D,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;qBAC1D;iBACF;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,CAAC,aAAa,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC;iBAC5G;aACF;SACF;QAED,QAAQ,EAAE;YACR,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,KAAK,EAAE,CAAC,sBAAsB,CAAC;oBAC/B,MAAM,EAAE;wBACN,EAAE,EAAE,gBAAgB;wBACpB,GAAG,EAAE,gBAAgB;wBACrB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;wBACtD,MAAM,EAAE;4BACN;gCACE,sDAAsD;gCACtD,MAAM,EAAE,MAAM;gCACd,KAAK,EAAE,iBAAiB;gCACxB,OAAO,EAAE,CAAC,uBAAuB,CAAC;6BACnC;4BACD;gCACE,2CAA2C;gCAC3C,MAAM,EAAE,SAAS;gCACjB,KAAK,EAAE,oBAAoB;gCAC3B,OAAO,EAAE,CAAC,uBAAuB,CAAC;6BACnC;4BACD;gCACE,oCAAoC;gCACpC,MAAM,EAAE,WAAW;gCACnB,OAAO,EAAE,CAAC,uBAAuB,CAAC;6BACnC;yBACF;wBACD,OAAO,EAAE;4BACP,8DAA8D;4BAC9D,iEAAiE;4BACjE,MAAM,EAAE,MAAM;yBACf;qBACF;iBACF;gBACD,SAAS,EAAE;oBACT,KAAK,EAAE,CAAC,oBAAoB,CAAC;oBAC7B,EAAE,EAAE;wBACF,kBAAkB,EAAE;4BAClB,MAAM,EAAE,SAAS;yBAClB;wBACD,kBAAkB,EAAE;4BAClB,MAAM,EAAE,sBAAsB;4BAC9B,OAAO,EAAE,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;yBAC3F;qBACF;iBACF;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,mBAAmB,CAAC;oBAC5B,MAAM,EAAE;wBACN,EAAE,EAAE,aAAa;wBACjB,GAAG,EAAE,aAAa;wBAClB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;wBACrC,MAAM,EAAE;4BACN,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;yBACtD;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,kBAAkB;4BAC1B,OAAO,EAAE,CAAC,aAAa,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;yBACzG;qBACF;iBACF;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;iBACd;aACF;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;oBACxD,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;iBAC3D;aACF;SACF;QAED,SAAS,EAAE;YACT,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE;gBACN,SAAS,EAAE;oBACT,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,KAAK,EAAE,CAAC,oBAAoB,CAAC;4BAC7B,MAAM,EAAE;gCACN,EAAE,EAAE,mBAAmB;gCACvB,GAAG,EAAE,mBAAmB;gCACxB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gCACtD,MAAM,EAAE;oCACN,MAAM,EAAE,MAAM;oCACd,OAAO,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;iCAC5D;gCACD,OAAO,EAAE;oCACP,4DAA4D;oCAC5D,MAAM,EAAE,MAAM;oCACd,OAAO,EAAE,CAAC,uBAAuB,CAAC;iCACnC;6BACF;yBACF;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,OAAO;yBACd;qBACF;iBACF;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,KAAK,EAAE,CAAC,iBAAiB,CAAC;4BAC1B,MAAM,EAAE;gCACN,EAAE,EAAE,gBAAgB;gCACpB,GAAG,EAAE,gBAAgB;gCACrB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gCACpE,MAAM,EAAE;oCACN,MAAM,EAAE,YAAY;oCACpB,OAAO,EAAE,CAAC,iBAAiB,CAAC;iCAC7B;gCACD,OAAO,EAAE;oCACP,kDAAkD;oCAClD,MAAM,EAAE,MAAM;iCACf;6BACF;yBACF;wBACD,UAAU,EAAE;4BACV,MAAM,EAAE;gCACN;oCACE,MAAM,EAAE,MAAM;oCACd,KAAK,EAAE,YAAY;oCACnB,OAAO,EAAE,CAAC,cAAc,CAAC;iCAC1B;gCACD;oCACE,MAAM,EAAE,sBAAsB;oCAC9B,OAAO,EAAE,CAAC,cAAc,CAAC;iCAC1B;6BACF;yBACF;wBACD,oBAAoB,EAAE;4BACpB,EAAE,EAAE;gCACF,aAAa,EAAE;oCACb,MAAM,EAAE,MAAM;oCACd,OAAO,EAAE,CAAC,kBAAkB,CAAC;iCAC9B;gCACD,aAAa,EAAE;oCACb,MAAM,EAAE,sBAAsB;oCAC9B,OAAO,EAAE,CAAC,kBAAkB,CAAC;iCAC9B;6BACF;yBACF;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,OAAO;yBACd;qBACF;iBACF;gBACD,WAAW,EAAE;oBACX,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,KAAK,EAAE,CAAC,oBAAoB,CAAC;4BAC7B,MAAM,EAAE;gCACN,EAAE,EAAE,aAAa;gCACjB,GAAG,EAAE,aAAa;gCAClB,MAAM,EAAE;oCACN;wCACE,MAAM,EAAE,sBAAsB;wCAC9B,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAE,KAAK,CAAC,MAA4B,CAAC,WAAW;wCACrE,OAAO,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;qCACvD;oCACD;wCACE,MAAM,EAAE,MAAM;wCACd,OAAO,EAAE,CAAC,oBAAoB,CAAC;qCAChC;iCACF;gCACD,OAAO,EAAE;oCACP,oCAAoC;oCACpC,MAAM,EAAE,MAAM;iCACf;6BACF;yBACF;wBACD,oBAAoB,EAAE;4BACpB,EAAE,EAAE;gCACF,aAAa,EAAE;oCACb,MAAM,EAAE,UAAU;iCACnB;gCACD,eAAe,EAAE;oCACf,MAAM,EAAE,MAAM;iCACf;gCACD,aAAa,EAAE;oCACb,MAAM,EAAE,sBAAsB;iCAC/B;6BACF;yBACF;wBACD,QAAQ,EAAE;4BACR,MAAM,EAAE;gCACN,EAAE,EAAE,cAAc;gCAClB,GAAG,EAAE,cAAc;gCACnB,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;oCACZ,IAAI,EAAE,yBAAyB;oCAC/B,YAAY,EAAE,2BAA2B,IAAI,CAAC,GAAG,EAAE,EAAE;iCACtD,CAAC;gCACF,MAAM,EAAE;oCACN,MAAM,EAAE,MAAM;oCACd,OAAO,EAAE;wCACP;4CACE,IAAI,EAAE,mBAAmB;4CACzB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAG,KAAK,CAAC,MAA6B,CAAC,MAAM,EAAE,CAAC;yCACjF;qCACF;iCACF;gCACD,OAAO,EAAE;oCACP,uCAAuC;oCACvC,MAAM,EAAE,MAAM;oCACd,OAAO,EAAE,CAAC,aAAa,EAAE,wBAAwB,CAAC;iCACnD;6BACF;yBACF;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,OAAO;yBACd;qBACF;iBACF;aACF;YACD,MAAM,EAAE;gBACN;oBACE,MAAM,EAAE,sBAAsB;oBAC9B,KAAK,EAAE,gBAAgB;oBACvB,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;iBACnE;gBACD;oBACE,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE;wBACP,MAAM,CAAC;4BACL,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gCACrB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;gCACvC,OAAO,IAAI,KAAK,CACd,0CAA0C,GAAG,KAAK;oCAChD,qFAAqF;oCACrF,gFAAgF;oCAChF,eAAe;oCACf,4FAA4F;oCAC5F,6GAA6G,CAChH,CAAC;4BACJ,CAAC;yBACF,CAAC;wBACF,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;qBAC1D;iBACF;aACF;SACF;QAED,oBAAoB,EAAE;YACpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC;YAC9E,OAAO,EAAE,kBAAkB;YAC3B,MAAM,EAAE;gBACN,6CAA6C;gBAC7C,gBAAgB,EAAE;oBAChB,MAAM,EAAE;wBACN;4BACE,MAAM,EAAE,wBAAwB;4BAChC,KAAK,EAAE,gBAAgB;4BACvB,OAAO,EAAE;gCACP,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAyB,EAAE,CAAC;gCAC7D,sBAAsB;gCACtB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE;6BACrE;yBACF;wBACD,EAAE,MAAM,EAAE,mBAAmB,EAAE;qBAChC;iBACF;gBAED,oDAAoD;gBACpD,iBAAiB,EAAE;oBACjB,MAAM,EAAE;wBACN,EAAE,EAAE,gBAAgB;wBACpB,GAAG,EAAE,gBAAgB;wBACrB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;wBACpE,MAAM,EAAE;4BACN;gCACE,MAAM,EAAE,kBAAkB;gCAC1B,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oCACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;oCAC3C,OAAO,MAAM,CAAC,MAAM,CAAC;gCACvB,CAAC;gCACD,OAAO,EAAE;oCACP,MAAM,CAAC;wCACL,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;4CAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;4CAC3C,OAAO,MAAM,CAAC,KAAK,CAAC;wCACtB,CAAC;qCACF,CAAC;oCACF,iBAAiB;iCAClB;6BACF;4BACD,EAAE,MAAM,EAAE,oBAAoB,EAAE;yBACjC;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,oBAAoB,EAAE,sBAAsB;yBACrD;qBACF;iBACF;gBAED,iDAAiD;gBACjD,gBAAgB,EAAE;oBAChB,KAAK,EAAE,CAAC,mBAAmB,CAAC;oBAC5B,EAAE,EAAE;wBACF,iBAAiB,EAAE;4BACjB,MAAM,EAAE,kBAAkB;4BAC1B,OAAO,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;yBAChD;wBACD,iBAAiB,EAAE;4BACjB,MAAM,EAAE,oBAAoB;4BAC5B,OAAO,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;yBACjD;wBACD,MAAM,EAAE;4BACN,MAAM,EAAE,sBAAsB;4BAC9B,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE;yBAC9E;qBACF;iBACF;gBAED,wDAAwD;gBACxD,gBAAgB,EAAE;oBAChB,KAAK,EAAE,CAAC,iBAAiB,CAAC;oBAC1B,MAAM,EAAE;wBACN,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,cAAc;wBACnB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;wBACpE,MAAM,EAAE;4BACN;gCACE,MAAM,EAAE,wBAAwB;gCAChC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oCACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAyB,CAAC;oCAC/C,OAAO,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;gCAC3C,CAAC;gCACD,OAAO,EAAE;oCACP,MAAM,CAAC;wCACL,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;4CACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAyB,CAAC;4CAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;wCAC/D,CAAC;wCACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,KAAyB;wCACjD,iBAAiB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAE,KAAK,CAAC,MAA0B,CAAC,UAAU;qCAC/E,CAAC;oCACF,yBAAyB;oCACzB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE;iCACrE;6BACF;4BACD;gCACE,MAAM,EAAE,oBAAoB;gCAC5B,OAAO,EAAE,CAAC,iBAAiB,CAAC;6BAC7B;yBACF;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,oBAAoB;yBAC7B;qBACF;iBACF;gBAED,sCAAsC;gBACtC,kBAAkB,EAAE;oBAClB,MAAM,EAAE;wBACN,EAAE,EAAE,iBAAiB;wBACrB,GAAG,EAAE,iBAAiB;wBACtB,MAAM,EAAE;4BACN;gCACE,MAAM,EAAE,4BAA4B;gCACpC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI;6BAC5C;4BACD,EAAE,MAAM,EAAE,mBAAmB,EAAE;yBAChC;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,mBAAmB;yBAC5B;qBACF;iBACF;gBAED,wCAAwC;gBACxC,iBAAiB,EAAE;oBACjB,KAAK,EAAE,CAAC,qBAAqB,CAAC;oBAC9B,MAAM,EAAE;wBACN,EAAE,EAAE,eAAe;wBACnB,GAAG,EAAE,eAAe;wBACpB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;wBACtD,MAAM,EAAE;4BACN,MAAM,EAAE,4BAA4B;4BACpC,OAAO,EAAE;gCACP,uBAAuB;gCACvB,MAAM,CAAC;oCACL,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;wCACxB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAsE,CAAC;wCAC5F,OAAO;4CACL,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,gBAAgB;4CACnD,uBAAuB,EAAE,MAAM,CAAC,UAAU,CAAC,yBAAyB;4CACpE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;yCACtC,CAAC;oCACJ,CAAC;iCACF,CAAC;6BACH;yBACF;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,iBAAiB;4BACzB,OAAO,EAAE,CAAC,aAAa,EAAE,qBAAqB,CAAC;yBAChD;qBACF;iBACF;gBAED,6CAA6C;gBAC7C,0BAA0B,EAAE;oBAC1B,KAAK,EAAE,CAAC,qBAAqB,CAAC;oBAC9B,MAAM,EAAE;wBACN,EAAE,EAAE,yBAAyB;wBAC7B,GAAG,EAAE,yBAAyB;wBAC9B,MAAM,EAAE;4BACN,MAAM,EAAE,wBAAwB;4BAChC,OAAO,EAAE;gCACP,MAAM,CAAC;oCACL,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;wCACzB,MAAM,OAAO,GAAG,KAAK,CAAC,MAA4B,CAAC;wCACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;oCAChE,CAAC;oCACD,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAChC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAE,QAA6B,CAAC,CAAC,CAAE,QAA6B;iCACvF,CAAC;gCACF,oBAAoB;gCACpB,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE;6BACrE;yBACF;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,iBAAiB;4BACzB,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;yBAC7C;qBACF;iBACF;gBAED,0BAA0B;gBAC1B,eAAe,EAAE;oBACf,KAAK,EAAE,CAAC,0BAA0B,CAAC;oBACnC,EAAE,EAAE;wBACF,qBAAqB,EAAE;4BACrB,MAAM,EAAE,wBAAwB;4BAChC,OAAO,EAAE;gCACP,mBAAmB;gCACnB,MAAM,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,QAA4B,EAAE,CAAC;gCAChE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE;6BACrE;yBACF;wBACD,UAAU,EAAE;4BACV,MAAM,EAAE,mBAAmB;yBAC5B;wBACD,MAAM,EAAE;4BACN,MAAM,EAAE,sBAAsB;4BAC9B,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE;yBAC9E;qBACF;iBACF;aACF;SACF;QAED,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,CAAC;YACxF,MAAM,EAAE;gBACN,EAAE,EAAE,sBAAsB;gBAC1B,GAAG,EAAE,sBAAsB;gBAC3B,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;gBACrC,MAAM,EAAE;oBACN,MAAM,EAAE,cAAc;oBACtB,OAAO,EAAE,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;iBAC7F;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;iBACtF;aACF;SACF;QAED,YAAY,EAAE;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,CAAC;YACxF,MAAM,EAAE;gBACN,EAAE,EAAE,UAAU;gBACd,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;gBACrC,MAAM,EAAE;oBACN;wBACE,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;4BACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;4BAC3C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;wBACzB,CAAC;wBACD,OAAO,EAAE;4BACP,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;gCACrB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;gCAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE;oCACpC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,cAAc;iCACjD,CAAC,CAAC;4BACL,CAAC;4BACD,MAAM,CAAC;gCACL,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oCACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;oCAC3C,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gCACnD,CAAC;6BACF,CAAC;4BACF,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;yBAC7D;qBACF;oBACD;wBACE,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE;4BACP,MAAM,CAAC;gCACL,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;oCAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;oCAC3C,OAAO,MAAM,CAAC,OAAO,CAAC;gCACxB,CAAC;6BACF,CAAC;4BACF,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;gCACrB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;gCAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;4BACrE,CAAC;4BACD,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;yBAC7D;qBACF;iBACF;gBACD,OAAO,EAAE;oBACP,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;iBAC3G;aACF;SACF;QAED,WAAW,EAAE;YACX,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;YACrE,MAAM,EAAE;gBACN,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN;4BACE,MAAM,EAAE,qBAAqB;4BAC7B,KAAK,EAAE,uBAAuB;yBAC/B;wBACD,EAAE,MAAM,EAAE,kBAAkB,EAAE;qBAC/B;iBACF;gBAED,gBAAgB,EAAE;oBAChB,MAAM,EAAE;wBACN,EAAE,EAAE,eAAe;wBACnB,GAAG,EAAE,eAAe;wBACpB,MAAM,EAAE;4BACN;gCACE,MAAM,EAAE,iBAAiB;gCACzB,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAE,KAAK,CAAC,MAAmD,CAAC,UAAU;gCAC3F,OAAO,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;6BACvD;4BACD;gCACE,MAAM,EAAE,MAAM;gCACd,OAAO,EAAE,CAAC,eAAe,CAAC;6BAC3B;yBACF;wBACD,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;qBAC5B;iBACF;gBAED,eAAe,EAAE;oBACf,KAAK,EAAE,CAAC,kBAAkB,CAAC;oBAC3B,EAAE,EAAE;wBACF,eAAe,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;wBACtD,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;wBACnC,MAAM,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE;qBAC3C;iBACF;gBAED,uBAAuB,EAAE;oBACvB,KAAK,EAAE,CAAC,6BAA6B,CAAC;oBACtC,MAAM,EAAE;wBACN,EAAE,EAAE,uBAAuB;wBAC3B,GAAG,EAAE,uBAAuB;wBAC5B,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BACvB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;4BAC7C,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;4BACjC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;yBAC/B,CAAC;wBACF,MAAM,EAAE;4BACN,MAAM,EAAE,YAAY;4BACpB,OAAO,EAAE,CAAC,qBAAqB,CAAC;yBACjC;qBACF;iBACF;gBAED,UAAU,EAAE;oBACV,KAAK,EAAE,CAAC,gBAAgB,CAAC;oBACzB,MAAM,EAAE;wBACN,EAAE,EAAE,eAAe;wBACnB,GAAG,EAAE,eAAe;wBACpB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BACvB,OAAO,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;4BACpC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU;yBAChC,CAAC;wBACF,MAAM,EAAE;4BACN,MAAM,EAAE,eAAe;4BACvB,OAAO,EAAE,CAAC,mBAAmB,CAAC;yBAC/B;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;yBAC7C;qBACF;iBACF;gBAED,aAAa,EAAE;oBACb,MAAM,EAAE;wBACN;4BACE,MAAM,EAAE,aAAa;4BACrB,KAAK,EAAE,UAAU;yBAClB;wBACD;4BACE,MAAM,EAAE,2BAA2B;yBACpC;qBACF;iBACF;gBAED,WAAW,EAAE;oBACX,KAAK,EAAE,CAAC,cAAc,CAAC;oBACvB,EAAE,EAAE;wBACF,WAAW,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;wBAClD,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;wBAC/B,MAAM,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE;qBAC3C;iBACF;gBAED,uBAAuB,EAAE;oBACvB,KAAK,EAAE,CAAC,6BAA6B,CAAC;oBACtC,MAAM,EAAE;wBACN,EAAE,EAAE,uBAAuB;wBAC3B,GAAG,EAAE,uBAAuB;wBAC5B,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BACvB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,SAAS;4BAC7C,KAAK,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;4BACjC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;4BAC1C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;yBAC/B,CAAC;wBACF,MAAM,EAAE;4BACN,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,CAAC,qBAAqB,CAAC;yBACjC;qBACF;iBACF;gBAED,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,aAAa,CAAC;oBACtB,MAAM,EAAE;wBACN,EAAE,EAAE,YAAY;wBAChB,GAAG,EAAE,YAAY;wBACjB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;wBAC7D,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;wBAChC,OAAO,EAAE;4BACP,MAAM,EAAE,2BAA2B;4BACnC,OAAO,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;yBAC3C;qBACF;iBACF;gBAED,UAAU,EAAE;oBACV,KAAK,EAAE,CAAC,gBAAgB,CAAC;oBACzB,MAAM,EAAE;wBACN,EAAE,EAAE,UAAU;wBACd,GAAG,EAAE,UAAU;wBACf,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;4BACvB,KAAK,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;4BAClC,IAAI,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;4BACjC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU;yBAChC,CAAC;wBACF,MAAM,EAAE;4BACN,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;yBAC1C;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;yBACzC;qBACF;iBACF;gBAED,yBAAyB,EAAE;oBACzB,KAAK,EAAE,CAAC,wBAAwB,CAAC;oBACjC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;iBAC3B;gBAED,IAAI,EAAE;oBACJ,IAAI,EAAE,OAAO;iBACd;aACF;YACD,MAAM,EAAE;gBACN,MAAM,EAAE,UAAU;aACnB;SACF;QAED,QAAQ,EAAE;YACR,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,cAAc,CAAC;SACnF;QAED,SAAS,EAAE;YACT,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,CAAC;SACrF;QAED,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,CAAC;SAC7E;KACF;CACF,CAAC,CAAC","sourcesContent":["import { setup, assign, fromPromise, type ActorRefFrom } from 'xstate';\nimport type {\n InstallerMachineContext,\n InstallerMachineInput,\n InstallerMachineEvent,\n DetectionOutput,\n GitCheckOutput,\n AgentOutput,\n EnvFileInfo,\n DiscoveryResult,\n CredentialSource,\n BranchCheckOutput,\n WorkspaceCheckOutput,\n} from './installer-core.types.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport type { DeviceAuthResult, DeviceAuthResponse } from './device-auth.js';\nimport type { StagingCredentials } from './staging-api.js';\nimport { getManualPrInstructions } from './post-install.js';\nimport { hasGhCli } from '../utils/git-utils.js';\n\nexport const installerMachine = setup({\n types: {\n context: {} as InstallerMachineContext,\n input: {} as InstallerMachineInput,\n events: {} as InstallerMachineEvent,\n },\n\n actions: {\n emitStateEnter: ({ context }, params: { state: string }) => {\n context.emitter.emit('state:enter', { state: params.state });\n },\n emitStateExit: ({ context }, params: { state: string }) => {\n context.emitter.emit('state:exit', { state: params.state });\n },\n emitAuthChecking: ({ context }) => {\n context.emitter.emit('auth:checking', {});\n },\n emitAuthRequired: ({ context }) => {\n context.emitter.emit('auth:required', {});\n },\n emitAuthSuccess: ({ context }) => {\n context.emitter.emit('auth:success', {});\n },\n emitAuthFailure: ({ context }) => {\n const message = context.error?.message ?? 'Authentication failed';\n context.emitter.emit('auth:failure', { message });\n },\n emitDetectionStart: ({ context }) => {\n context.emitter.emit('detection:start', {});\n },\n emitDetectionComplete: ({ context }) => {\n if (context.integration) {\n context.emitter.emit('detection:complete', { integration: context.integration });\n } else {\n context.emitter.emit('detection:none', {});\n }\n },\n emitGitChecking: ({ context }) => {\n context.emitter.emit('git:checking', {});\n },\n emitGitClean: ({ context }) => {\n context.emitter.emit('git:clean', {});\n },\n emitGitDirty: ({ context }) => {\n context.emitter.emit('git:dirty', { files: context.gitDirtyFiles });\n },\n emitGitConfirmed: ({ context }) => {\n context.emitter.emit('git:dirty:confirmed', {});\n },\n emitGitCancelled: ({ context }) => {\n context.emitter.emit('git:dirty:cancelled', {});\n },\n emitScaffoldChecking: ({ context }) => {\n context.emitter.emit('scaffold:checking', {});\n },\n emitScaffoldPrompt: ({ context }) => {\n context.emitter.emit('scaffold:prompt', { packageManager: context.packageManager ?? 'npm' });\n },\n emitScaffoldStart: ({ context }) => {\n context.emitter.emit('scaffold:start', { packageManager: context.packageManager ?? 'npm' });\n },\n emitScaffoldComplete: ({ context }) => {\n context.emitter.emit('scaffold:complete', {});\n },\n emitScaffoldFailed: ({ context }) => {\n const message = context.error?.message ?? 'Scaffold failed';\n context.emitter.emit('scaffold:failed', { error: message });\n },\n emitScaffoldSkipped: ({ context }) => {\n context.emitter.emit('scaffold:skipped', {});\n },\n assignWorkspaceResult: assign({\n scaffoldable: ({ event }) => (event as unknown as { output: WorkspaceCheckOutput }).output?.scaffoldable ?? false,\n packageManager: ({ event }) =>\n (event as unknown as { output: WorkspaceCheckOutput }).output?.packageManager ?? 'npm',\n autoScaffold: ({ event }) => (event as unknown as { output: WorkspaceCheckOutput }).output?.autoScaffold ?? false,\n }),\n assignScaffolded: assign({\n scaffolded: () => true,\n }),\n emitBranchChecking: ({ context }) => {\n context.emitter.emit('branch:checking', {});\n },\n emitBranchProtected: ({ context }) => {\n if (context.currentBranch) {\n context.emitter.emit('branch:protected', { branch: context.currentBranch });\n context.emitter.emit('branch:prompt', { branch: context.currentBranch });\n }\n },\n emitBranchCreated: ({ context }, params: { branch: string }) => {\n context.emitter.emit('branch:created', { branch: params.branch });\n },\n emitBranchCreateFailed: ({ context }) => {\n const message = context.error?.message ?? 'Failed to create branch';\n context.emitter.emit('branch:create:failed', { error: message });\n },\n assignBranchResult: assign({\n currentBranch: ({ event }) => {\n const doneEvent = event as unknown as { output: BranchCheckOutput };\n return doneEvent.output?.branch ?? undefined;\n },\n isProtectedBranch: ({ event }) => {\n const doneEvent = event as unknown as { output: BranchCheckOutput };\n return doneEvent.output?.isProtected ?? false;\n },\n }),\n emitCredentialsGathering: ({ context }) => {\n const requiresApiKey = ['nextjs', 'tanstack-start', 'react-router'].includes(context.integration ?? '');\n context.emitter.emit('credentials:gathering', { requiresApiKey });\n context.emitter.emit('credentials:request', { requiresApiKey });\n },\n emitCredentialsFound: ({ context }) => {\n context.emitter.emit('credentials:found', {});\n },\n emitEnvDetected: ({ context }) => {\n context.emitter.emit('credentials:env:detected', { files: context.envFilesDetected ?? [] });\n },\n emitEnvScanPrompt: ({ context }) => {\n context.emitter.emit('credentials:env:prompt', { files: context.envFilesDetected ?? [] });\n },\n emitEnvScanning: ({ context }) => {\n context.emitter.emit('credentials:env:scanning', {});\n },\n emitEnvCredentialsFound: ({ context }) => {\n context.emitter.emit('credentials:env:found', { sourcePath: context.envCredentialPath ?? '.env' });\n },\n emitEnvNotFound: ({ context }) => {\n context.emitter.emit('credentials:env:notfound', {});\n },\n emitDeviceAuthStart: () => {\n // Emitted by actor when it has verification URL\n },\n emitDeviceAuthSuccess: ({ context }) => {\n context.emitter.emit('device:success', { email: undefined });\n },\n emitDeviceAuthError: ({ context }) => {\n const message = context.error?.message ?? 'Device authorization failed';\n context.emitter.emit('device:error', { message });\n },\n emitDeviceTimeout: ({ context }) => {\n context.emitter.emit('device:timeout', {});\n },\n emitStagingFetching: ({ context }) => {\n context.emitter.emit('staging:fetching', {});\n },\n emitStagingSuccess: ({ context }) => {\n context.emitter.emit('staging:success', {});\n },\n emitStagingError: ({ context }) => {\n const message = context.error?.message ?? 'Failed to fetch staging credentials';\n context.emitter.emit('staging:error', { message });\n },\n emitConfigStart: ({ context }) => {\n context.emitter.emit('config:start', {});\n },\n emitConfigComplete: ({ context }) => {\n context.emitter.emit('config:complete', {});\n },\n emitAgentStart: ({ context }) => {\n context.emitter.emit('agent:start', {});\n },\n emitAgentSuccess: ({ context }, params: { summary?: string }) => {\n context.emitter.emit('agent:success', { summary: params.summary });\n context.emitter.emit('complete', { success: true, summary: params.summary });\n },\n emitAgentFailure: ({ context }) => {\n const message = context.error?.message ?? 'Agent execution failed';\n const stack = context.error?.stack;\n context.emitter.emit('agent:failure', { message, stack });\n context.emitter.emit('complete', { success: false });\n },\n assignDetectionResult: assign({\n integration: ({ event }) => {\n const doneEvent = event as unknown as { output: DetectionOutput };\n return doneEvent.output?.integration;\n },\n }),\n assignGitResult: assign({\n gitIsClean: ({ event }) => {\n const doneEvent = event as unknown as { output: GitCheckOutput };\n return doneEvent.output?.isClean ?? true;\n },\n gitDirtyFiles: ({ event }) => {\n const doneEvent = event as unknown as { output: GitCheckOutput };\n return doneEvent.output?.files ?? [];\n },\n }),\n\n assignCredentials: assign({\n credentials: ({ event }) => {\n if (event.type === 'CREDENTIALS_SUBMITTED') {\n return { apiKey: event.apiKey, clientId: event.clientId };\n }\n return undefined;\n },\n }),\n\n assignError: assign({\n error: ({ event }) => {\n if ('error' in event && event.error instanceof Error) {\n return event.error;\n }\n if ('error' in event && typeof event.error === 'object' && event.error !== null) {\n return new Error(String((event.error as { message?: string }).message ?? event.error));\n }\n return new Error('Unknown error');\n },\n }),\n\n emitCancelled: ({ context }) => {\n context.emitter.emit('complete', { success: false, summary: 'Installer cancelled by user' });\n },\n emitError: ({ context }) => {\n const message = context.error?.message ?? 'An unexpected error occurred';\n context.emitter.emit('error', { message, stack: context.error?.stack });\n context.emitter.emit('complete', { success: false });\n },\n // Post-install actions\n assignChangedFiles: assign({\n changedFiles: ({ event }) => {\n const doneEvent = event as unknown as { output: { hasChanges: boolean; files: string[] } };\n return doneEvent.output?.files ?? [];\n },\n }),\n emitChangesDetected: ({ context }) => {\n context.emitter.emit('postinstall:changes', { files: context.changedFiles ?? [] });\n },\n emitNoChanges: ({ context }) => {\n context.emitter.emit('postinstall:nochanges', {});\n },\n emitCommitPrompt: ({ context }) => {\n context.emitter.emit('postinstall:commit:prompt', {});\n },\n emitGeneratingCommitMessage: ({ context }) => {\n context.emitter.emit('postinstall:commit:generating', {});\n },\n assignCommitMessage: assign({\n commitMessage: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitCommitting: ({ context }) => {\n context.emitter.emit('postinstall:commit:committing', { message: context.commitMessage ?? '' });\n },\n emitCommitSuccess: ({ context }) => {\n context.emitter.emit('postinstall:commit:success', { message: context.commitMessage ?? '' });\n },\n emitCommitFailed: ({ context }) => {\n const message = context.error?.message ?? 'Commit failed';\n context.emitter.emit('postinstall:commit:failed', { error: message });\n },\n emitPrPrompt: ({ context }) => {\n context.emitter.emit('postinstall:pr:prompt', {});\n },\n emitGeneratingPrDescription: ({ context }) => {\n context.emitter.emit('postinstall:pr:generating', {});\n },\n assignPrDescription: assign({\n prDescription: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitPushing: ({ context }) => {\n context.emitter.emit('postinstall:pr:pushing', {});\n },\n emitPushFailed: ({ context }) => {\n const message = context.error?.message ?? 'Push failed';\n context.emitter.emit('postinstall:push:failed', { error: message });\n },\n emitCreatingPr: ({ context }) => {\n context.emitter.emit('postinstall:pr:creating', {});\n },\n assignPrUrl: assign({\n prUrl: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitPrCreated: ({ context }) => {\n context.emitter.emit('postinstall:pr:success', { url: context.prUrl ?? '' });\n },\n emitPrFailed: ({ context }) => {\n const message = context.error?.message ?? 'PR creation failed';\n context.emitter.emit('postinstall:pr:failed', { error: message });\n },\n emitManualInstructions: ({ context }) => {\n const branch = context.currentBranch ?? 'HEAD';\n const instructions = getManualPrInstructions(branch);\n context.emitter.emit('postinstall:manual', { instructions });\n },\n emitComplete: ({ context }) => {\n const summary = context.agentSummary ?? 'WorkOS AuthKit installed successfully!';\n context.emitter.emit('complete', { success: true, summary });\n },\n },\n\n guards: {\n shouldSkipAuth: ({ context }) => context.options.skipAuth === true,\n gitIsClean: ({ context }) => context.gitIsClean === true,\n hasCredentials: ({ context }) => context.options.apiKey !== undefined && context.options.clientId !== undefined,\n hasIntegration: ({ context }) => context.integration !== undefined,\n shouldSkipPostInstall: ({ context }) => context.options.noCommit === true,\n hasGhCli: () => hasGhCli(),\n // Read from the actor's done event (output), not context: the\n // assignWorkspaceResult action has not run yet when guards are evaluated.\n notScaffoldable: ({ event }) => !(event as unknown as { output: WorkspaceCheckOutput }).output?.scaffoldable,\n shouldAutoScaffold: ({ event }) => {\n const output = (event as unknown as { output: WorkspaceCheckOutput }).output;\n return !!output?.scaffoldable && !!output?.autoScaffold;\n },\n },\n\n actors: {\n checkAuthentication: fromPromise<boolean, { options: InstallerOptions }>(async () => {\n throw new Error('checkAuthentication not implemented - provide via machine.provide()');\n }),\n checkWorkspace: fromPromise<WorkspaceCheckOutput, { options: InstallerOptions }>(async () => {\n throw new Error('checkWorkspace not implemented - provide via machine.provide()');\n }),\n runScaffold: fromPromise<void, { context: InstallerMachineContext }>(async () => {\n throw new Error('runScaffold not implemented - provide via machine.provide()');\n }),\n detectIntegration: fromPromise<DetectionOutput, { options: InstallerOptions }>(async () => {\n throw new Error('detectIntegration not implemented - provide via machine.provide()');\n }),\n checkGitStatus: fromPromise<GitCheckOutput, { installDir: string }>(async () => {\n throw new Error('checkGitStatus not implemented - provide via machine.provide()');\n }),\n configureEnvironment: fromPromise<void, { context: InstallerMachineContext }>(async () => {\n throw new Error('configureEnvironment not implemented - provide via machine.provide()');\n }),\n runAgent: fromPromise<AgentOutput, { context: InstallerMachineContext }>(async () => {\n throw new Error('runAgent not implemented - provide via machine.provide()');\n }),\n // Credential discovery actors\n detectEnvFiles: fromPromise<EnvFileInfo, { installDir: string }>(async () => {\n throw new Error('detectEnvFiles not implemented - provide via machine.provide()');\n }),\n scanEnvFiles: fromPromise<DiscoveryResult, { installDir: string }>(async () => {\n throw new Error('scanEnvFiles not implemented - provide via machine.provide()');\n }),\n checkStoredAuth: fromPromise<boolean, void>(async () => {\n throw new Error('checkStoredAuth not implemented - provide via machine.provide()');\n }),\n runDeviceAuth: fromPromise<\n { result: DeviceAuthResult; deviceAuth: DeviceAuthResponse },\n { emitter: InstallerMachineContext['emitter'] }\n >(async () => {\n throw new Error('runDeviceAuth not implemented - provide via machine.provide()');\n }),\n fetchStagingCredentials: fromPromise<StagingCredentials, void>(async () => {\n throw new Error('fetchStagingCredentials not implemented - provide via machine.provide()');\n }),\n // Branch check actors\n checkBranch: fromPromise<BranchCheckOutput, void>(async () => {\n throw new Error('checkBranch not implemented - provide via machine.provide()');\n }),\n createBranch: fromPromise<{ branch: string }, { name: string; fallbackName: string }>(async () => {\n throw new Error('createBranch not implemented - provide via machine.provide()');\n }),\n // Post-install actors\n detectChanges: fromPromise<{ hasChanges: boolean; files: string[] }, void>(async () => {\n throw new Error('detectChanges not implemented - provide via machine.provide()');\n }),\n generateCommitMessage: fromPromise<string, { integration: string; files: string[]; direct?: boolean }>(async () => {\n throw new Error('generateCommitMessage not implemented - provide via machine.provide()');\n }),\n commitChanges: fromPromise<void, { message: string; cwd: string }>(async () => {\n throw new Error('commitChanges not implemented - provide via machine.provide()');\n }),\n generatePrDescription: fromPromise<\n string,\n { integration: string; files: string[]; commitMessage: string; direct?: boolean }\n >(async () => {\n throw new Error('generatePrDescription not implemented - provide via machine.provide()');\n }),\n pushBranch: fromPromise<void, { cwd: string }>(async () => {\n throw new Error('pushBranch not implemented - provide via machine.provide()');\n }),\n createPr: fromPromise<string, { title: string; body: string; cwd: string }>(async () => {\n throw new Error('createPr not implemented - provide via machine.provide()');\n }),\n },\n}).createMachine({\n id: 'installer',\n initial: 'idle',\n\n context: ({ input }) => ({\n emitter: input.emitter,\n options: input.options,\n // Set by the detection actor; no pre-seeding (the --integration flag is gone).\n integration: undefined,\n credentials:\n input.options.apiKey && input.options.clientId\n ? { apiKey: input.options.apiKey, clientId: input.options.clientId }\n : undefined,\n gitIsClean: true,\n gitDirtyFiles: [],\n error: undefined,\n }),\n\n // Global event handlers - CANCEL can be sent from any state\n on: {\n CANCEL: {\n target: '.cancelled',\n },\n },\n\n states: {\n idle: {\n on: {\n START: [\n {\n target: 'scaffold',\n guard: 'shouldSkipAuth',\n actions: { type: 'emitStateEnter', params: { state: 'scaffold' } },\n },\n {\n target: 'authenticating',\n actions: { type: 'emitStateEnter', params: { state: 'authenticating' } },\n },\n ],\n },\n },\n\n authenticating: {\n entry: ['emitAuthChecking'],\n invoke: {\n id: 'checkAuthentication',\n src: 'checkAuthentication',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'scaffold',\n actions: [\n 'emitAuthSuccess',\n { type: 'emitStateExit', params: { state: 'authenticating' } },\n { type: 'emitStateEnter', params: { state: 'scaffold' } },\n ],\n },\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAuthFailure', { type: 'emitStateExit', params: { state: 'authenticating' } }],\n },\n },\n },\n\n scaffold: {\n initial: 'checking',\n states: {\n checking: {\n entry: ['emitScaffoldChecking'],\n invoke: {\n id: 'checkWorkspace',\n src: 'checkWorkspace',\n input: ({ context }) => ({ options: context.options }),\n onDone: [\n {\n // Not an empty dir: fall through to today's behavior.\n target: 'done',\n guard: 'notScaffoldable',\n actions: ['assignWorkspaceResult'],\n },\n {\n // Headless or --scaffold: skip the prompt.\n target: 'running',\n guard: 'shouldAutoScaffold',\n actions: ['assignWorkspaceResult'],\n },\n {\n // Interactive empty dir: ask first.\n target: 'prompting',\n actions: ['assignWorkspaceResult'],\n },\n ],\n onError: {\n // Workspace check failure is non-fatal: proceed to preparing,\n // which errors on no-integration exactly as before this feature.\n target: 'done',\n },\n },\n },\n prompting: {\n entry: ['emitScaffoldPrompt'],\n on: {\n SCAFFOLD_CONFIRMED: {\n target: 'running',\n },\n SCAFFOLD_CANCELLED: {\n target: '#installer.cancelled',\n actions: ['emitScaffoldSkipped', { type: 'emitStateExit', params: { state: 'scaffold' } }],\n },\n },\n },\n running: {\n entry: ['emitScaffoldStart'],\n invoke: {\n id: 'runScaffold',\n src: 'runScaffold',\n input: ({ context }) => ({ context }),\n onDone: {\n target: 'done',\n actions: ['assignScaffolded', 'emitScaffoldComplete'],\n },\n onError: {\n target: '#installer.error',\n actions: ['assignError', 'emitScaffoldFailed', { type: 'emitStateExit', params: { state: 'scaffold' } }],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n onDone: {\n target: 'preparing',\n actions: [\n { type: 'emitStateExit', params: { state: 'scaffold' } },\n { type: 'emitStateEnter', params: { state: 'preparing' } },\n ],\n },\n },\n\n preparing: {\n type: 'parallel',\n states: {\n detection: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitDetectionStart'],\n invoke: {\n id: 'detectIntegration',\n src: 'detectIntegration',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'done',\n actions: ['assignDetectionResult', 'emitDetectionComplete'],\n },\n onError: {\n // Detection failure is non-fatal - user can select manually\n target: 'done',\n actions: ['emitDetectionComplete'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n gitCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitGitChecking'],\n invoke: {\n id: 'checkGitStatus',\n src: 'checkGitStatus',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: {\n target: 'evaluating',\n actions: ['assignGitResult'],\n },\n onError: {\n // Git check failure is non-fatal - treat as clean\n target: 'done',\n },\n },\n },\n evaluating: {\n always: [\n {\n target: 'done',\n guard: 'gitIsClean',\n actions: ['emitGitClean'],\n },\n {\n target: 'awaitingConfirmation',\n actions: ['emitGitDirty'],\n },\n ],\n },\n awaitingConfirmation: {\n on: {\n GIT_CONFIRMED: {\n target: 'done',\n actions: ['emitGitConfirmed'],\n },\n GIT_CANCELLED: {\n target: '#installer.cancelled',\n actions: ['emitGitCancelled'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n branchCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitBranchChecking'],\n invoke: {\n id: 'checkBranch',\n src: 'checkBranch',\n onDone: [\n {\n target: 'awaitingConfirmation',\n guard: ({ event }) => (event.output as BranchCheckOutput).isProtected,\n actions: ['assignBranchResult', 'emitBranchProtected'],\n },\n {\n target: 'done',\n actions: ['assignBranchResult'],\n },\n ],\n onError: {\n // Branch check failure is non-fatal\n target: 'done',\n },\n },\n },\n awaitingConfirmation: {\n on: {\n BRANCH_CREATE: {\n target: 'creating',\n },\n BRANCH_CONTINUE: {\n target: 'done',\n },\n BRANCH_CANCEL: {\n target: '#installer.cancelled',\n },\n },\n },\n creating: {\n invoke: {\n id: 'createBranch',\n src: 'createBranch',\n input: () => ({\n name: 'feat/add-workos-authkit',\n fallbackName: `feat/add-workos-authkit-${Date.now()}`,\n }),\n onDone: {\n target: 'done',\n actions: [\n {\n type: 'emitBranchCreated',\n params: ({ event }) => ({ branch: (event.output as { branch: string }).branch }),\n },\n ],\n },\n onError: {\n // Branch creation failure is non-fatal\n target: 'done',\n actions: ['assignError', 'emitBranchCreateFailed'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n },\n onDone: [\n {\n target: 'gatheringCredentials',\n guard: 'hasIntegration',\n actions: { type: 'emitStateExit', params: { state: 'preparing' } },\n },\n {\n target: 'error',\n actions: [\n assign({\n error: ({ context }) => {\n const dir = context.options.installDir;\n return new Error(\n `No supported framework was detected in ${dir}.\\n` +\n `Because this directory isn't empty, a new app wasn't scaffolded, and no recognized ` +\n `framework (such as a package.json with Next.js) was found to install into.\\n\\n` +\n `Next steps:\\n` +\n ` - New app: run \\`workos install\\` in an empty directory to scaffold Next.js + AuthKit.\\n` +\n ` - Existing project: run from the directory that contains your package.json, or pass --install-dir <path>.`,\n );\n },\n }),\n { type: 'emitStateExit', params: { state: 'preparing' } },\n ],\n },\n ],\n },\n\n gatheringCredentials: {\n entry: [{ type: 'emitStateEnter', params: { state: 'gatheringCredentials' } }],\n initial: 'checkingCliFlags',\n states: {\n // Step 1: Check CLI flags (highest priority)\n checkingCliFlags: {\n always: [\n {\n target: '#installer.configuring',\n guard: 'hasCredentials',\n actions: [\n assign({ credentialSource: () => 'cli' as CredentialSource }),\n 'emitCredentialsFound',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n { target: 'detectingEnvFiles' },\n ],\n },\n\n // Step 2: Check if env files exist (don't read yet)\n detectingEnvFiles: {\n invoke: {\n id: 'detectEnvFiles',\n src: 'detectEnvFiles',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: [\n {\n target: 'promptingEnvScan',\n guard: ({ event }) => {\n const output = event.output as EnvFileInfo;\n return output.exists;\n },\n actions: [\n assign({\n envFilesDetected: ({ event }) => {\n const output = event.output as EnvFileInfo;\n return output.files;\n },\n }),\n 'emitEnvDetected',\n ],\n },\n { target: 'checkingStoredAuth' },\n ],\n onError: {\n target: 'checkingStoredAuth', // Non-fatal, continue\n },\n },\n },\n\n // Step 3: Ask user for consent to scan env files\n promptingEnvScan: {\n entry: ['emitEnvScanPrompt'],\n on: {\n ENV_SCAN_APPROVED: {\n target: 'scanningEnvFiles',\n actions: assign({ envScanConsent: () => true }),\n },\n ENV_SCAN_DECLINED: {\n target: 'checkingStoredAuth',\n actions: assign({ envScanConsent: () => false }),\n },\n CANCEL: {\n target: '#installer.cancelled',\n actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n },\n },\n },\n\n // Step 4: Scan env files for credentials (with consent)\n scanningEnvFiles: {\n entry: ['emitEnvScanning'],\n invoke: {\n id: 'scanEnvFiles',\n src: 'scanEnvFiles',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: [\n {\n target: '#installer.configuring',\n guard: ({ event }) => {\n const result = event.output as DiscoveryResult;\n return result.found && !!result.clientId;\n },\n actions: [\n assign({\n credentials: ({ event }) => {\n const result = event.output as DiscoveryResult;\n return { clientId: result.clientId!, apiKey: result.apiKey };\n },\n credentialSource: () => 'env' as CredentialSource,\n envCredentialPath: ({ event }) => (event.output as DiscoveryResult).sourcePath,\n }),\n 'emitEnvCredentialsFound',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n {\n target: 'checkingStoredAuth',\n actions: ['emitEnvNotFound'],\n },\n ],\n onError: {\n target: 'checkingStoredAuth',\n },\n },\n },\n\n // Step 5: Check for stored auth token\n checkingStoredAuth: {\n invoke: {\n id: 'checkStoredAuth',\n src: 'checkStoredAuth',\n onDone: [\n {\n target: 'fetchingStagingCredentials',\n guard: ({ event }) => event.output === true,\n },\n { target: 'runningDeviceAuth' },\n ],\n onError: {\n target: 'runningDeviceAuth',\n },\n },\n },\n\n // Step 6: Run device authorization flow\n runningDeviceAuth: {\n entry: ['emitDeviceAuthStart'],\n invoke: {\n id: 'runDeviceAuth',\n src: 'runDeviceAuth',\n input: ({ context }) => ({ emitter: context.emitter }),\n onDone: {\n target: 'fetchingStagingCredentials',\n actions: [\n 'emitDeviceAuthSuccess',\n assign({\n deviceAuth: ({ event }) => {\n const output = event.output as { result: DeviceAuthResult; deviceAuth: DeviceAuthResponse };\n return {\n verificationUri: output.deviceAuth.verification_uri,\n verificationUriComplete: output.deviceAuth.verification_uri_complete,\n userCode: output.deviceAuth.user_code,\n };\n },\n }),\n ],\n },\n onError: {\n target: 'promptingManual',\n actions: ['assignError', 'emitDeviceAuthError'],\n },\n },\n },\n\n // Step 7: Fetch staging credentials from API\n fetchingStagingCredentials: {\n entry: ['emitStagingFetching'],\n invoke: {\n id: 'fetchStagingCredentials',\n src: 'fetchStagingCredentials',\n onDone: {\n target: '#installer.configuring',\n actions: [\n assign({\n credentials: ({ event }) => {\n const staging = event.output as StagingCredentials;\n return { clientId: staging.clientId, apiKey: staging.apiKey };\n },\n credentialSource: ({ context }) =>\n context.deviceAuth ? ('device' as CredentialSource) : ('stored' as CredentialSource),\n }),\n 'emitStagingSuccess',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n onError: {\n target: 'promptingManual',\n actions: ['assignError', 'emitStagingError'],\n },\n },\n },\n\n // Step 8: Manual fallback\n promptingManual: {\n entry: ['emitCredentialsGathering'],\n on: {\n CREDENTIALS_SUBMITTED: {\n target: '#installer.configuring',\n actions: [\n 'assignCredentials',\n assign({ credentialSource: () => 'manual' as CredentialSource }),\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n RETRY_AUTH: {\n target: 'runningDeviceAuth',\n },\n CANCEL: {\n target: '#installer.cancelled',\n actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n },\n },\n },\n },\n },\n\n configuring: {\n entry: [{ type: 'emitStateEnter', params: { state: 'configuring' } }, 'emitConfigStart'],\n invoke: {\n id: 'configureEnvironment',\n src: 'configureEnvironment',\n input: ({ context }) => ({ context }),\n onDone: {\n target: 'runningAgent',\n actions: ['emitConfigComplete', { type: 'emitStateExit', params: { state: 'configuring' } }],\n },\n onError: {\n target: 'error',\n actions: ['assignError', { type: 'emitStateExit', params: { state: 'configuring' } }],\n },\n },\n },\n\n runningAgent: {\n entry: [{ type: 'emitStateEnter', params: { state: 'runningAgent' } }, 'emitAgentStart'],\n invoke: {\n id: 'runAgent',\n src: 'runAgent',\n input: ({ context }) => ({ context }),\n onDone: [\n {\n target: 'error',\n guard: ({ event }) => {\n const output = event.output as AgentOutput;\n return !output.success;\n },\n actions: [\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n context.emitter.emit('agent:failure', {\n message: output.error?.message ?? 'Agent failed',\n });\n },\n assign({\n error: ({ event }) => {\n const output = event.output as AgentOutput;\n return output.error ?? new Error('Agent failed');\n },\n }),\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n {\n target: 'postInstall',\n actions: [\n assign({\n agentSummary: ({ event }) => {\n const output = event.output as AgentOutput;\n return output.summary;\n },\n }),\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n context.emitter.emit('agent:success', { summary: output.summary });\n },\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n ],\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAgentFailure', { type: 'emitStateExit', params: { state: 'runningAgent' } }],\n },\n },\n },\n\n postInstall: {\n initial: 'checking',\n entry: [{ type: 'emitStateEnter', params: { state: 'postInstall' } }],\n states: {\n checking: {\n always: [\n {\n target: '#installer.complete',\n guard: 'shouldSkipPostInstall',\n },\n { target: 'detectingChanges' },\n ],\n },\n\n detectingChanges: {\n invoke: {\n id: 'detectChanges',\n src: 'detectChanges',\n onDone: [\n {\n target: 'promptingCommit',\n guard: ({ event }) => (event.output as { hasChanges: boolean; files: string[] }).hasChanges,\n actions: ['assignChangedFiles', 'emitChangesDetected'],\n },\n {\n target: 'done',\n actions: ['emitNoChanges'],\n },\n ],\n onError: { target: 'done' },\n },\n },\n\n promptingCommit: {\n entry: ['emitCommitPrompt'],\n on: {\n COMMIT_APPROVED: { target: 'generatingCommitMessage' },\n COMMIT_DECLINED: { target: 'done' },\n CANCEL: { target: '#installer.cancelled' },\n },\n },\n\n generatingCommitMessage: {\n entry: ['emitGeneratingCommitMessage'],\n invoke: {\n id: 'generateCommitMessage',\n src: 'generateCommitMessage',\n input: ({ context }) => ({\n integration: context.integration ?? 'project',\n files: context.changedFiles ?? [],\n direct: context.options.direct,\n }),\n onDone: {\n target: 'committing',\n actions: ['assignCommitMessage'],\n },\n },\n },\n\n committing: {\n entry: ['emitCommitting'],\n invoke: {\n id: 'commitChanges',\n src: 'commitChanges',\n input: ({ context }) => ({\n message: context.commitMessage ?? '',\n cwd: context.options.installDir,\n }),\n onDone: {\n target: 'checkingGhCli',\n actions: ['emitCommitSuccess'],\n },\n onError: {\n target: 'done',\n actions: ['assignError', 'emitCommitFailed'],\n },\n },\n },\n\n checkingGhCli: {\n always: [\n {\n target: 'promptingPr',\n guard: 'hasGhCli',\n },\n {\n target: 'showingManualInstructions',\n },\n ],\n },\n\n promptingPr: {\n entry: ['emitPrPrompt'],\n on: {\n PR_APPROVED: { target: 'generatingPrDescription' },\n PR_DECLINED: { target: 'done' },\n CANCEL: { target: '#installer.cancelled' },\n },\n },\n\n generatingPrDescription: {\n entry: ['emitGeneratingPrDescription'],\n invoke: {\n id: 'generatePrDescription',\n src: 'generatePrDescription',\n input: ({ context }) => ({\n integration: context.integration ?? 'project',\n files: context.changedFiles ?? [],\n commitMessage: context.commitMessage ?? '',\n direct: context.options.direct,\n }),\n onDone: {\n target: 'pushing',\n actions: ['assignPrDescription'],\n },\n },\n },\n\n pushing: {\n entry: ['emitPushing'],\n invoke: {\n id: 'pushBranch',\n src: 'pushBranch',\n input: ({ context }) => ({ cwd: context.options.installDir }),\n onDone: { target: 'creatingPr' },\n onError: {\n target: 'showingManualInstructions',\n actions: ['assignError', 'emitPushFailed'],\n },\n },\n },\n\n creatingPr: {\n entry: ['emitCreatingPr'],\n invoke: {\n id: 'createPr',\n src: 'createPr',\n input: ({ context }) => ({\n title: context.commitMessage ?? '',\n body: context.prDescription ?? '',\n cwd: context.options.installDir,\n }),\n onDone: {\n target: 'done',\n actions: ['assignPrUrl', 'emitPrCreated'],\n },\n onError: {\n target: 'done',\n actions: ['assignError', 'emitPrFailed'],\n },\n },\n },\n\n showingManualInstructions: {\n entry: ['emitManualInstructions'],\n always: { target: 'done' },\n },\n\n done: {\n type: 'final',\n },\n },\n onDone: {\n target: 'complete',\n },\n },\n\n complete: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'complete' } }, 'emitComplete'],\n },\n\n cancelled: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'cancelled' } }, 'emitCancelled'],\n },\n\n error: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'error' } }, 'emitError'],\n },\n },\n});\n\nexport type InstallerMachine = typeof installerMachine;\nexport type InstallerActor = ActorRefFrom<typeof installerMachine>;\n"]}
|
|
1
|
+
{"version":3,"file":"installer-core.js","sourceRoot":"","sources":["../../src/lib/installer-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { setup, assign, fromPromise, type ActorRefFrom } from 'xstate';\nimport type {\n InstallerMachineContext,\n InstallerMachineInput,\n InstallerMachineEvent,\n DetectionOutput,\n GitCheckOutput,\n AgentOutput,\n EnvFileInfo,\n DiscoveryResult,\n CredentialSource,\n BranchCheckOutput,\n WorkspaceCheckOutput,\n} from './installer-core.types.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport type { CompletionData } from './events.js';\nimport type { DeviceAuthResult, DeviceAuthResponse } from './device-auth.js';\nimport type { StagingCredentials } from './staging-api.js';\nimport { getManualPrInstructions } from './post-install.js';\nimport { hasGhCli } from '../utils/git-utils.js';\nimport { formatWorkOSCommand } from '../utils/command-invocation.js';\n\nexport const installerMachine = setup({\n types: {\n context: {} as InstallerMachineContext,\n input: {} as InstallerMachineInput,\n events: {} as InstallerMachineEvent,\n },\n\n actions: {\n emitStateEnter: ({ context }, params: { state: string }) => {\n context.emitter.emit('state:enter', { state: params.state });\n },\n emitStateExit: ({ context }, params: { state: string }) => {\n context.emitter.emit('state:exit', { state: params.state });\n },\n emitAuthChecking: ({ context }) => {\n context.emitter.emit('auth:checking', {});\n },\n emitAuthRequired: ({ context }) => {\n context.emitter.emit('auth:required', {});\n },\n emitAuthSuccess: ({ context }) => {\n context.emitter.emit('auth:success', {});\n },\n emitAuthFailure: ({ context }) => {\n const message = context.error?.message ?? 'Authentication failed';\n context.emitter.emit('auth:failure', { message });\n },\n emitDetectionStart: ({ context }) => {\n context.emitter.emit('detection:start', {});\n },\n emitDetectionComplete: ({ context }) => {\n if (context.integration) {\n context.emitter.emit('detection:complete', { integration: context.integration });\n } else {\n context.emitter.emit('detection:none', {});\n }\n },\n emitGitChecking: ({ context }) => {\n context.emitter.emit('git:checking', {});\n },\n emitGitClean: ({ context }) => {\n context.emitter.emit('git:clean', {});\n },\n emitGitDirty: ({ context }) => {\n context.emitter.emit('git:dirty', { files: context.gitDirtyFiles });\n },\n emitGitConfirmed: ({ context }) => {\n context.emitter.emit('git:dirty:confirmed', {});\n },\n emitGitCancelled: ({ context }) => {\n context.emitter.emit('git:dirty:cancelled', {});\n },\n emitScaffoldChecking: ({ context }) => {\n context.emitter.emit('scaffold:checking', {});\n },\n emitScaffoldPrompt: ({ context }) => {\n context.emitter.emit('scaffold:prompt', { packageManager: context.packageManager ?? 'npm' });\n },\n emitScaffoldStart: ({ context }) => {\n context.emitter.emit('scaffold:start', { packageManager: context.packageManager ?? 'npm' });\n },\n emitScaffoldComplete: ({ context }) => {\n context.emitter.emit('scaffold:complete', {});\n },\n emitScaffoldFailed: ({ context }) => {\n const message = context.error?.message ?? 'Scaffold failed';\n context.emitter.emit('scaffold:failed', { error: message });\n },\n emitScaffoldSkipped: ({ context }) => {\n context.emitter.emit('scaffold:skipped', {});\n },\n assignWorkspaceResult: assign({\n scaffoldable: ({ event }) => (event as unknown as { output: WorkspaceCheckOutput }).output?.scaffoldable ?? false,\n packageManager: ({ event }) =>\n (event as unknown as { output: WorkspaceCheckOutput }).output?.packageManager ?? 'npm',\n autoScaffold: ({ event }) => (event as unknown as { output: WorkspaceCheckOutput }).output?.autoScaffold ?? false,\n }),\n assignScaffolded: assign({\n scaffolded: () => true,\n }),\n emitBranchChecking: ({ context }) => {\n context.emitter.emit('branch:checking', {});\n },\n emitBranchProtected: ({ context }) => {\n if (context.currentBranch) {\n context.emitter.emit('branch:protected', { branch: context.currentBranch });\n context.emitter.emit('branch:prompt', { branch: context.currentBranch });\n }\n },\n emitBranchCreated: ({ context }, params: { branch: string }) => {\n context.emitter.emit('branch:created', { branch: params.branch });\n },\n emitBranchCreateFailed: ({ context }) => {\n const message = context.error?.message ?? 'Failed to create branch';\n context.emitter.emit('branch:create:failed', { error: message });\n },\n assignBranchResult: assign({\n currentBranch: ({ event }) => {\n const doneEvent = event as unknown as { output: BranchCheckOutput };\n return doneEvent.output?.branch ?? undefined;\n },\n isProtectedBranch: ({ event }) => {\n const doneEvent = event as unknown as { output: BranchCheckOutput };\n return doneEvent.output?.isProtected ?? false;\n },\n }),\n emitCredentialsGathering: ({ context }) => {\n const requiresApiKey = ['nextjs', 'tanstack-start', 'react-router'].includes(context.integration ?? '');\n context.emitter.emit('credentials:gathering', { requiresApiKey });\n context.emitter.emit('credentials:request', { requiresApiKey });\n },\n emitCredentialsFound: ({ context }) => {\n context.emitter.emit('credentials:found', {});\n },\n emitEnvDetected: ({ context }) => {\n context.emitter.emit('credentials:env:detected', { files: context.envFilesDetected ?? [] });\n },\n emitEnvScanPrompt: ({ context }) => {\n context.emitter.emit('credentials:env:prompt', { files: context.envFilesDetected ?? [] });\n },\n emitEnvScanning: ({ context }) => {\n context.emitter.emit('credentials:env:scanning', {});\n },\n emitEnvCredentialsFound: ({ context }) => {\n context.emitter.emit('credentials:env:found', { sourcePath: context.envCredentialPath ?? '.env' });\n },\n emitEnvNotFound: ({ context }) => {\n context.emitter.emit('credentials:env:notfound', {});\n },\n emitDeviceAuthStart: () => {\n // Emitted by actor when it has verification URL\n },\n emitDeviceAuthSuccess: ({ context }) => {\n context.emitter.emit('device:success', { email: undefined });\n },\n emitDeviceAuthError: ({ context }) => {\n const message = context.error?.message ?? 'Device authorization failed';\n context.emitter.emit('device:error', { message });\n },\n emitDeviceTimeout: ({ context }) => {\n context.emitter.emit('device:timeout', {});\n },\n emitStagingFetching: ({ context }) => {\n context.emitter.emit('staging:fetching', {});\n },\n emitStagingSuccess: ({ context }) => {\n context.emitter.emit('staging:success', { source: context.deviceAuth ? 'device' : 'stored' });\n },\n emitStagingError: ({ context }) => {\n const message = context.error?.message ?? 'Failed to fetch staging credentials';\n context.emitter.emit('staging:error', { message });\n },\n emitConfigStart: ({ context }) => {\n context.emitter.emit('config:start', {});\n },\n emitConfigComplete: ({ context }) => {\n context.emitter.emit('config:complete', {});\n },\n emitAgentStart: ({ context }) => {\n context.emitter.emit('agent:start', {});\n },\n emitAgentSuccess: ({ context }, params: { summary?: string }) => {\n context.emitter.emit('agent:success', { summary: params.summary });\n context.emitter.emit('complete', { success: true, summary: params.summary });\n },\n emitAgentFailure: ({ context }) => {\n const message = context.error?.message ?? 'Agent execution failed';\n const stack = context.error?.stack;\n context.emitter.emit('agent:failure', { message, stack });\n context.emitter.emit('complete', { success: false });\n },\n assignDetectionResult: assign({\n integration: ({ event }) => {\n const doneEvent = event as unknown as { output: DetectionOutput };\n return doneEvent.output?.integration;\n },\n }),\n assignGitResult: assign({\n gitIsClean: ({ event }) => {\n const doneEvent = event as unknown as { output: GitCheckOutput };\n return doneEvent.output?.isClean ?? true;\n },\n gitDirtyFiles: ({ event }) => {\n const doneEvent = event as unknown as { output: GitCheckOutput };\n return doneEvent.output?.files ?? [];\n },\n }),\n\n assignCredentials: assign({\n credentials: ({ event }) => {\n if (event.type === 'CREDENTIALS_SUBMITTED') {\n return { apiKey: event.apiKey, clientId: event.clientId };\n }\n return undefined;\n },\n }),\n\n assignError: assign({\n error: ({ event }) => {\n if ('error' in event && event.error instanceof Error) {\n return event.error;\n }\n if ('error' in event && typeof event.error === 'object' && event.error !== null) {\n return new Error(String((event.error as { message?: string }).message ?? event.error));\n }\n return new Error('Unknown error');\n },\n }),\n\n emitCancelled: ({ context }) => {\n context.emitter.emit('complete', { success: false, summary: 'Installer cancelled by user' });\n },\n emitError: ({ context }) => {\n const message = context.error?.message ?? 'An unexpected error occurred';\n context.emitter.emit('error', { message, stack: context.error?.stack });\n context.emitter.emit('complete', { success: false });\n },\n // Post-install actions\n assignChangedFiles: assign({\n changedFiles: ({ event }) => {\n const doneEvent = event as unknown as { output: { hasChanges: boolean; files: string[] } };\n return doneEvent.output?.files ?? [];\n },\n }),\n emitChangesDetected: ({ context }) => {\n context.emitter.emit('postinstall:changes', { files: context.changedFiles ?? [] });\n },\n emitNoChanges: ({ context }) => {\n context.emitter.emit('postinstall:nochanges', {});\n },\n emitCommitPrompt: ({ context }) => {\n context.emitter.emit('postinstall:commit:prompt', {});\n },\n emitGeneratingCommitMessage: ({ context }) => {\n context.emitter.emit('postinstall:commit:generating', {});\n },\n assignCommitMessage: assign({\n commitMessage: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitCommitting: ({ context }) => {\n context.emitter.emit('postinstall:commit:committing', { message: context.commitMessage ?? '' });\n },\n emitCommitSuccess: ({ context }) => {\n context.emitter.emit('postinstall:commit:success', { message: context.commitMessage ?? '' });\n },\n emitCommitFailed: ({ context }) => {\n const message = context.error?.message ?? 'Commit failed';\n context.emitter.emit('postinstall:commit:failed', { error: message });\n },\n emitPrPrompt: ({ context }) => {\n context.emitter.emit('postinstall:pr:prompt', {});\n },\n emitGeneratingPrDescription: ({ context }) => {\n context.emitter.emit('postinstall:pr:generating', {});\n },\n assignPrDescription: assign({\n prDescription: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitPushing: ({ context }) => {\n context.emitter.emit('postinstall:pr:pushing', {});\n },\n emitPushFailed: ({ context }) => {\n const message = context.error?.message ?? 'Push failed';\n context.emitter.emit('postinstall:push:failed', { error: message });\n },\n emitCreatingPr: ({ context }) => {\n context.emitter.emit('postinstall:pr:creating', {});\n },\n assignPrUrl: assign({\n prUrl: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitPrCreated: ({ context }) => {\n context.emitter.emit('postinstall:pr:success', { url: context.prUrl ?? '' });\n },\n emitPrFailed: ({ context }) => {\n const message = context.error?.message ?? 'PR creation failed';\n context.emitter.emit('postinstall:pr:failed', { error: message });\n },\n emitManualInstructions: ({ context }) => {\n const branch = context.currentBranch ?? 'HEAD';\n const instructions = getManualPrInstructions(branch);\n context.emitter.emit('postinstall:manual', { instructions });\n },\n emitComplete: ({ context }) => {\n const summary = context.agentSummary ?? 'WorkOS AuthKit installed successfully!';\n context.emitter.emit('complete', { success: true, summary, completion: context.completion });\n },\n assignCompletion: assign({\n completion: ({ event }) => (event as unknown as { output?: CompletionData }).output,\n }),\n },\n\n guards: {\n shouldSkipAuth: ({ context }) => context.options.skipAuth === true,\n gitIsClean: ({ context }) => context.gitIsClean === true,\n hasCredentials: ({ context }) => context.options.apiKey !== undefined && context.options.clientId !== undefined,\n hasIntegration: ({ context }) => context.integration !== undefined,\n shouldSkipPostInstall: ({ context }) => context.options.noCommit === true,\n hasGhCli: () => hasGhCli(),\n // Read from the actor's done event (output), not context: the\n // assignWorkspaceResult action has not run yet when guards are evaluated.\n notScaffoldable: ({ event }) => !(event as unknown as { output: WorkspaceCheckOutput }).output?.scaffoldable,\n shouldAutoScaffold: ({ event }) => {\n const output = (event as unknown as { output: WorkspaceCheckOutput }).output;\n return !!output?.scaffoldable && !!output?.autoScaffold;\n },\n },\n\n actors: {\n checkAuthentication: fromPromise<boolean, { options: InstallerOptions }>(async () => {\n throw new Error('checkAuthentication not implemented - provide via machine.provide()');\n }),\n checkWorkspace: fromPromise<WorkspaceCheckOutput, { options: InstallerOptions }>(async () => {\n throw new Error('checkWorkspace not implemented - provide via machine.provide()');\n }),\n runScaffold: fromPromise<void, { context: InstallerMachineContext }>(async () => {\n throw new Error('runScaffold not implemented - provide via machine.provide()');\n }),\n detectIntegration: fromPromise<DetectionOutput, { options: InstallerOptions }>(async () => {\n throw new Error('detectIntegration not implemented - provide via machine.provide()');\n }),\n checkGitStatus: fromPromise<GitCheckOutput, { installDir: string }>(async () => {\n throw new Error('checkGitStatus not implemented - provide via machine.provide()');\n }),\n configureEnvironment: fromPromise<void, { context: InstallerMachineContext }>(async () => {\n throw new Error('configureEnvironment not implemented - provide via machine.provide()');\n }),\n runAgent: fromPromise<AgentOutput, { context: InstallerMachineContext }>(async () => {\n throw new Error('runAgent not implemented - provide via machine.provide()');\n }),\n buildCompletion: fromPromise<CompletionData | undefined, { context: InstallerMachineContext }>(async () => {\n throw new Error('buildCompletion not implemented - provide via machine.provide()');\n }),\n // Credential discovery actors\n detectEnvFiles: fromPromise<EnvFileInfo, { installDir: string }>(async () => {\n throw new Error('detectEnvFiles not implemented - provide via machine.provide()');\n }),\n scanEnvFiles: fromPromise<DiscoveryResult, { installDir: string }>(async () => {\n throw new Error('scanEnvFiles not implemented - provide via machine.provide()');\n }),\n checkStoredAuth: fromPromise<boolean, void>(async () => {\n throw new Error('checkStoredAuth not implemented - provide via machine.provide()');\n }),\n runDeviceAuth: fromPromise<\n { result: DeviceAuthResult; deviceAuth: DeviceAuthResponse },\n { emitter: InstallerMachineContext['emitter'] }\n >(async () => {\n throw new Error('runDeviceAuth not implemented - provide via machine.provide()');\n }),\n fetchStagingCredentials: fromPromise<StagingCredentials, void>(async () => {\n throw new Error('fetchStagingCredentials not implemented - provide via machine.provide()');\n }),\n // Branch check actors\n checkBranch: fromPromise<BranchCheckOutput, void>(async () => {\n throw new Error('checkBranch not implemented - provide via machine.provide()');\n }),\n createBranch: fromPromise<{ branch: string }, { name: string; fallbackName: string }>(async () => {\n throw new Error('createBranch not implemented - provide via machine.provide()');\n }),\n // Post-install actors\n detectChanges: fromPromise<{ hasChanges: boolean; files: string[] }, void>(async () => {\n throw new Error('detectChanges not implemented - provide via machine.provide()');\n }),\n generateCommitMessage: fromPromise<string, { integration: string; files: string[]; direct?: boolean }>(async () => {\n throw new Error('generateCommitMessage not implemented - provide via machine.provide()');\n }),\n commitChanges: fromPromise<void, { message: string; cwd: string }>(async () => {\n throw new Error('commitChanges not implemented - provide via machine.provide()');\n }),\n generatePrDescription: fromPromise<\n string,\n { integration: string; files: string[]; commitMessage: string; direct?: boolean }\n >(async () => {\n throw new Error('generatePrDescription not implemented - provide via machine.provide()');\n }),\n pushBranch: fromPromise<void, { cwd: string }>(async () => {\n throw new Error('pushBranch not implemented - provide via machine.provide()');\n }),\n createPr: fromPromise<string, { title: string; body: string; cwd: string }>(async () => {\n throw new Error('createPr not implemented - provide via machine.provide()');\n }),\n },\n}).createMachine({\n id: 'installer',\n initial: 'idle',\n\n context: ({ input }) => ({\n emitter: input.emitter,\n options: input.options,\n // Set by the detection actor; no pre-seeding (the --integration flag is gone).\n integration: undefined,\n credentials:\n input.options.apiKey && input.options.clientId\n ? { apiKey: input.options.apiKey, clientId: input.options.clientId }\n : undefined,\n gitIsClean: true,\n gitDirtyFiles: [],\n error: undefined,\n }),\n\n // Global event handlers - CANCEL can be sent from any state\n on: {\n CANCEL: {\n target: '.cancelled',\n },\n },\n\n states: {\n idle: {\n on: {\n START: [\n {\n target: 'scaffold',\n guard: 'shouldSkipAuth',\n actions: { type: 'emitStateEnter', params: { state: 'scaffold' } },\n },\n {\n target: 'authenticating',\n actions: { type: 'emitStateEnter', params: { state: 'authenticating' } },\n },\n ],\n },\n },\n\n authenticating: {\n entry: ['emitAuthChecking'],\n invoke: {\n id: 'checkAuthentication',\n src: 'checkAuthentication',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'scaffold',\n actions: [\n 'emitAuthSuccess',\n { type: 'emitStateExit', params: { state: 'authenticating' } },\n { type: 'emitStateEnter', params: { state: 'scaffold' } },\n ],\n },\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAuthFailure', { type: 'emitStateExit', params: { state: 'authenticating' } }],\n },\n },\n },\n\n scaffold: {\n initial: 'checking',\n states: {\n checking: {\n entry: ['emitScaffoldChecking'],\n invoke: {\n id: 'checkWorkspace',\n src: 'checkWorkspace',\n input: ({ context }) => ({ options: context.options }),\n onDone: [\n {\n // Not an empty dir: fall through to today's behavior.\n target: 'done',\n guard: 'notScaffoldable',\n actions: ['assignWorkspaceResult'],\n },\n {\n // Headless or --scaffold: skip the prompt.\n target: 'running',\n guard: 'shouldAutoScaffold',\n actions: ['assignWorkspaceResult'],\n },\n {\n // Interactive empty dir: ask first.\n target: 'prompting',\n actions: ['assignWorkspaceResult'],\n },\n ],\n onError: {\n // Workspace check failure is non-fatal: proceed to preparing,\n // which errors on no-integration exactly as before this feature.\n target: 'done',\n },\n },\n },\n prompting: {\n entry: ['emitScaffoldPrompt'],\n on: {\n SCAFFOLD_CONFIRMED: {\n target: 'running',\n },\n SCAFFOLD_CANCELLED: {\n target: '#installer.cancelled',\n actions: ['emitScaffoldSkipped', { type: 'emitStateExit', params: { state: 'scaffold' } }],\n },\n },\n },\n running: {\n entry: ['emitScaffoldStart'],\n invoke: {\n id: 'runScaffold',\n src: 'runScaffold',\n input: ({ context }) => ({ context }),\n onDone: {\n target: 'done',\n actions: ['assignScaffolded', 'emitScaffoldComplete'],\n },\n onError: {\n target: '#installer.error',\n actions: ['assignError', 'emitScaffoldFailed', { type: 'emitStateExit', params: { state: 'scaffold' } }],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n onDone: {\n target: 'preparing',\n actions: [\n { type: 'emitStateExit', params: { state: 'scaffold' } },\n { type: 'emitStateEnter', params: { state: 'preparing' } },\n ],\n },\n },\n\n preparing: {\n type: 'parallel',\n states: {\n detection: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitDetectionStart'],\n invoke: {\n id: 'detectIntegration',\n src: 'detectIntegration',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'done',\n actions: ['assignDetectionResult', 'emitDetectionComplete'],\n },\n onError: {\n // Detection failure is non-fatal - user can select manually\n target: 'done',\n actions: ['emitDetectionComplete'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n gitCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitGitChecking'],\n invoke: {\n id: 'checkGitStatus',\n src: 'checkGitStatus',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: {\n target: 'evaluating',\n actions: ['assignGitResult'],\n },\n onError: {\n // Git check failure is non-fatal - treat as clean\n target: 'done',\n },\n },\n },\n evaluating: {\n always: [\n {\n target: 'done',\n guard: 'gitIsClean',\n actions: ['emitGitClean'],\n },\n {\n target: 'awaitingConfirmation',\n actions: ['emitGitDirty'],\n },\n ],\n },\n awaitingConfirmation: {\n on: {\n GIT_CONFIRMED: {\n target: 'done',\n actions: ['emitGitConfirmed'],\n },\n GIT_CANCELLED: {\n target: '#installer.cancelled',\n actions: ['emitGitCancelled'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n branchCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitBranchChecking'],\n invoke: {\n id: 'checkBranch',\n src: 'checkBranch',\n onDone: [\n {\n target: 'awaitingConfirmation',\n guard: ({ event }) => (event.output as BranchCheckOutput).isProtected,\n actions: ['assignBranchResult', 'emitBranchProtected'],\n },\n {\n target: 'done',\n actions: ['assignBranchResult'],\n },\n ],\n onError: {\n // Branch check failure is non-fatal\n target: 'done',\n },\n },\n },\n awaitingConfirmation: {\n on: {\n BRANCH_CREATE: {\n target: 'creating',\n },\n BRANCH_CONTINUE: {\n target: 'done',\n },\n BRANCH_CANCEL: {\n target: '#installer.cancelled',\n },\n },\n },\n creating: {\n invoke: {\n id: 'createBranch',\n src: 'createBranch',\n input: () => ({\n name: 'feat/add-workos-authkit',\n fallbackName: `feat/add-workos-authkit-${Date.now()}`,\n }),\n onDone: {\n target: 'done',\n actions: [\n {\n type: 'emitBranchCreated',\n params: ({ event }) => ({ branch: (event.output as { branch: string }).branch }),\n },\n ],\n },\n onError: {\n // Branch creation failure is non-fatal\n target: 'done',\n actions: ['assignError', 'emitBranchCreateFailed'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n },\n onDone: [\n {\n target: 'gatheringCredentials',\n guard: 'hasIntegration',\n actions: { type: 'emitStateExit', params: { state: 'preparing' } },\n },\n {\n target: 'error',\n actions: [\n assign({\n error: ({ context }) => {\n const dir = context.options.installDir;\n return new Error(\n `No supported framework was detected in ${dir}.\\n` +\n `Because this directory isn't empty, a new app wasn't scaffolded, and no recognized ` +\n `framework (such as a package.json with Next.js) was found to install into.\\n\\n` +\n `Next steps:\\n` +\n ` - New app: run \\`${formatWorkOSCommand('install')}\\` in an empty directory to scaffold Next.js + AuthKit.\\n` +\n ` - Existing project: run from the directory that contains your package.json, or pass --install-dir <path>.`,\n );\n },\n }),\n { type: 'emitStateExit', params: { state: 'preparing' } },\n ],\n },\n ],\n },\n\n gatheringCredentials: {\n entry: [{ type: 'emitStateEnter', params: { state: 'gatheringCredentials' } }],\n initial: 'checkingCliFlags',\n states: {\n // Step 1: Check CLI flags (highest priority)\n checkingCliFlags: {\n always: [\n {\n target: '#installer.configuring',\n guard: 'hasCredentials',\n actions: [\n assign({ credentialSource: () => 'cli' as CredentialSource }),\n 'emitCredentialsFound',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n { target: 'detectingEnvFiles' },\n ],\n },\n\n // Step 2: Check if env files exist (don't read yet)\n detectingEnvFiles: {\n invoke: {\n id: 'detectEnvFiles',\n src: 'detectEnvFiles',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: [\n {\n target: 'promptingEnvScan',\n guard: ({ event }) => {\n const output = event.output as EnvFileInfo;\n return output.exists;\n },\n actions: [\n assign({\n envFilesDetected: ({ event }) => {\n const output = event.output as EnvFileInfo;\n return output.files;\n },\n }),\n 'emitEnvDetected',\n ],\n },\n { target: 'checkingStoredAuth' },\n ],\n onError: {\n target: 'checkingStoredAuth', // Non-fatal, continue\n },\n },\n },\n\n // Step 3: Ask user for consent to scan env files\n promptingEnvScan: {\n entry: ['emitEnvScanPrompt'],\n on: {\n ENV_SCAN_APPROVED: {\n target: 'scanningEnvFiles',\n actions: assign({ envScanConsent: () => true }),\n },\n ENV_SCAN_DECLINED: {\n target: 'checkingStoredAuth',\n actions: assign({ envScanConsent: () => false }),\n },\n CANCEL: {\n target: '#installer.cancelled',\n actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n },\n },\n },\n\n // Step 4: Scan env files for credentials (with consent)\n scanningEnvFiles: {\n entry: ['emitEnvScanning'],\n invoke: {\n id: 'scanEnvFiles',\n src: 'scanEnvFiles',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: [\n {\n target: '#installer.configuring',\n guard: ({ event }) => {\n const result = event.output as DiscoveryResult;\n return result.found && !!result.clientId;\n },\n actions: [\n assign({\n credentials: ({ event }) => {\n const result = event.output as DiscoveryResult;\n return { clientId: result.clientId!, apiKey: result.apiKey };\n },\n credentialSource: () => 'env' as CredentialSource,\n envCredentialPath: ({ event }) => (event.output as DiscoveryResult).sourcePath,\n }),\n 'emitEnvCredentialsFound',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n {\n target: 'checkingStoredAuth',\n actions: ['emitEnvNotFound'],\n },\n ],\n onError: {\n target: 'checkingStoredAuth',\n },\n },\n },\n\n // Step 5: Check for stored auth token\n checkingStoredAuth: {\n invoke: {\n id: 'checkStoredAuth',\n src: 'checkStoredAuth',\n onDone: [\n {\n target: 'fetchingStagingCredentials',\n guard: ({ event }) => event.output === true,\n },\n { target: 'runningDeviceAuth' },\n ],\n onError: {\n target: 'runningDeviceAuth',\n },\n },\n },\n\n // Step 6: Run device authorization flow\n runningDeviceAuth: {\n entry: ['emitDeviceAuthStart'],\n invoke: {\n id: 'runDeviceAuth',\n src: 'runDeviceAuth',\n input: ({ context }) => ({ emitter: context.emitter }),\n onDone: {\n target: 'fetchingStagingCredentials',\n actions: [\n 'emitDeviceAuthSuccess',\n assign({\n deviceAuth: ({ event }) => {\n const output = event.output as { result: DeviceAuthResult; deviceAuth: DeviceAuthResponse };\n return {\n verificationUri: output.deviceAuth.verification_uri,\n verificationUriComplete: output.deviceAuth.verification_uri_complete,\n userCode: output.deviceAuth.user_code,\n };\n },\n }),\n ],\n },\n onError: {\n target: 'promptingManual',\n actions: ['assignError', 'emitDeviceAuthError'],\n },\n },\n },\n\n // Step 7: Fetch staging credentials from API\n fetchingStagingCredentials: {\n entry: ['emitStagingFetching'],\n invoke: {\n id: 'fetchStagingCredentials',\n src: 'fetchStagingCredentials',\n onDone: {\n target: '#installer.configuring',\n actions: [\n assign({\n credentials: ({ event }) => {\n const staging = event.output as StagingCredentials;\n return { clientId: staging.clientId, apiKey: staging.apiKey };\n },\n credentialSource: ({ context }) =>\n context.deviceAuth ? ('device' as CredentialSource) : ('stored' as CredentialSource),\n }),\n 'emitStagingSuccess',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n onError: {\n target: 'promptingManual',\n actions: ['assignError', 'emitStagingError'],\n },\n },\n },\n\n // Step 8: Manual fallback\n promptingManual: {\n entry: ['emitCredentialsGathering'],\n on: {\n CREDENTIALS_SUBMITTED: {\n target: '#installer.configuring',\n actions: [\n 'assignCredentials',\n assign({ credentialSource: () => 'manual' as CredentialSource }),\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n RETRY_AUTH: {\n target: 'runningDeviceAuth',\n },\n CANCEL: {\n target: '#installer.cancelled',\n actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n },\n },\n },\n },\n },\n\n configuring: {\n entry: [{ type: 'emitStateEnter', params: { state: 'configuring' } }, 'emitConfigStart'],\n invoke: {\n id: 'configureEnvironment',\n src: 'configureEnvironment',\n input: ({ context }) => ({ context }),\n onDone: {\n target: 'runningAgent',\n actions: ['emitConfigComplete', { type: 'emitStateExit', params: { state: 'configuring' } }],\n },\n onError: {\n target: 'error',\n actions: ['assignError', { type: 'emitStateExit', params: { state: 'configuring' } }],\n },\n },\n },\n\n runningAgent: {\n entry: [{ type: 'emitStateEnter', params: { state: 'runningAgent' } }, 'emitAgentStart'],\n invoke: {\n id: 'runAgent',\n src: 'runAgent',\n input: ({ context }) => ({ context }),\n onDone: [\n {\n target: 'error',\n guard: ({ event }) => {\n const output = event.output as AgentOutput;\n return !output.success;\n },\n actions: [\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n context.emitter.emit('agent:failure', {\n message: output.error?.message ?? 'Agent failed',\n });\n },\n assign({\n error: ({ event }) => {\n const output = event.output as AgentOutput;\n return output.error ?? new Error('Agent failed');\n },\n }),\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n {\n target: 'postInstall',\n actions: [\n assign({\n agentSummary: ({ event }) => {\n const output = event.output as AgentOutput;\n return output.summary;\n },\n }),\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n context.emitter.emit('agent:success', { summary: output.summary });\n },\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n ],\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAgentFailure', { type: 'emitStateExit', params: { state: 'runningAgent' } }],\n },\n },\n },\n\n postInstall: {\n initial: 'checking',\n entry: [{ type: 'emitStateEnter', params: { state: 'postInstall' } }],\n states: {\n checking: {\n always: [\n {\n target: '#installer.buildingCompletion',\n guard: 'shouldSkipPostInstall',\n },\n { target: 'detectingChanges' },\n ],\n },\n\n detectingChanges: {\n invoke: {\n id: 'detectChanges',\n src: 'detectChanges',\n onDone: [\n {\n target: 'promptingCommit',\n guard: ({ event }) => (event.output as { hasChanges: boolean; files: string[] }).hasChanges,\n actions: ['assignChangedFiles', 'emitChangesDetected'],\n },\n {\n target: 'done',\n actions: ['emitNoChanges'],\n },\n ],\n onError: { target: 'done' },\n },\n },\n\n promptingCommit: {\n entry: ['emitCommitPrompt'],\n on: {\n COMMIT_APPROVED: { target: 'generatingCommitMessage' },\n COMMIT_DECLINED: { target: 'done' },\n CANCEL: { target: '#installer.cancelled' },\n },\n },\n\n generatingCommitMessage: {\n entry: ['emitGeneratingCommitMessage'],\n invoke: {\n id: 'generateCommitMessage',\n src: 'generateCommitMessage',\n input: ({ context }) => ({\n integration: context.integration ?? 'project',\n files: context.changedFiles ?? [],\n direct: context.options.direct,\n }),\n onDone: {\n target: 'committing',\n actions: ['assignCommitMessage'],\n },\n },\n },\n\n committing: {\n entry: ['emitCommitting'],\n invoke: {\n id: 'commitChanges',\n src: 'commitChanges',\n input: ({ context }) => ({\n message: context.commitMessage ?? '',\n cwd: context.options.installDir,\n }),\n onDone: {\n target: 'checkingGhCli',\n actions: ['emitCommitSuccess'],\n },\n onError: {\n target: 'done',\n actions: ['assignError', 'emitCommitFailed'],\n },\n },\n },\n\n checkingGhCli: {\n always: [\n {\n target: 'promptingPr',\n guard: 'hasGhCli',\n },\n {\n target: 'showingManualInstructions',\n },\n ],\n },\n\n promptingPr: {\n entry: ['emitPrPrompt'],\n on: {\n PR_APPROVED: { target: 'generatingPrDescription' },\n PR_DECLINED: { target: 'done' },\n CANCEL: { target: '#installer.cancelled' },\n },\n },\n\n generatingPrDescription: {\n entry: ['emitGeneratingPrDescription'],\n invoke: {\n id: 'generatePrDescription',\n src: 'generatePrDescription',\n input: ({ context }) => ({\n integration: context.integration ?? 'project',\n files: context.changedFiles ?? [],\n commitMessage: context.commitMessage ?? '',\n direct: context.options.direct,\n }),\n onDone: {\n target: 'pushing',\n actions: ['assignPrDescription'],\n },\n },\n },\n\n pushing: {\n entry: ['emitPushing'],\n invoke: {\n id: 'pushBranch',\n src: 'pushBranch',\n input: ({ context }) => ({ cwd: context.options.installDir }),\n onDone: { target: 'creatingPr' },\n onError: {\n target: 'showingManualInstructions',\n actions: ['assignError', 'emitPushFailed'],\n },\n },\n },\n\n creatingPr: {\n entry: ['emitCreatingPr'],\n invoke: {\n id: 'createPr',\n src: 'createPr',\n input: ({ context }) => ({\n title: context.commitMessage ?? '',\n body: context.prDescription ?? '',\n cwd: context.options.installDir,\n }),\n onDone: {\n target: 'done',\n actions: ['assignPrUrl', 'emitPrCreated'],\n },\n onError: {\n target: 'done',\n actions: ['assignError', 'emitPrFailed'],\n },\n },\n },\n\n showingManualInstructions: {\n entry: ['emitManualInstructions'],\n always: { target: 'done' },\n },\n\n done: {\n type: 'final',\n },\n },\n onDone: {\n target: 'buildingCompletion',\n },\n },\n\n // Compute the structured completion payload before entering `complete`.\n // `emitComplete` is a synchronous entry action, but the builder is async\n // (lockfile-aware dev command, port detection), so it must run in an actor\n // first. Errors never block completion — they fall through to the static box.\n buildingCompletion: {\n invoke: {\n src: 'buildCompletion',\n input: ({ context }) => ({ context }),\n onDone: { target: 'complete', actions: ['assignCompletion'] },\n onError: { target: 'complete' },\n },\n },\n\n complete: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'complete' } }, 'emitComplete'],\n },\n\n cancelled: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'cancelled' } }, 'emitCancelled'],\n },\n\n error: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'error' } }, 'emitError'],\n },\n },\n});\n\nexport type InstallerMachine = typeof installerMachine;\nexport type InstallerActor = ActorRefFrom<typeof installerMachine>;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { InstallerEventEmitter } from './events.js';
|
|
1
|
+
import type { InstallerEventEmitter, CompletionData } from './events.js';
|
|
2
2
|
import type { InstallerOptions } from '../utils/types.js';
|
|
3
3
|
import type { Integration } from './constants.js';
|
|
4
4
|
import type { PackageManager } from './scaffold/scaffold.js';
|
|
@@ -68,6 +68,8 @@ export interface InstallerMachineContext {
|
|
|
68
68
|
autoScaffold?: boolean;
|
|
69
69
|
/** Whether create-next-app actually ran and succeeded (for telemetry) */
|
|
70
70
|
scaffolded?: boolean;
|
|
71
|
+
/** Structured completion data for the success summary (built pre-complete) */
|
|
72
|
+
completion?: CompletionData;
|
|
71
73
|
}
|
|
72
74
|
/**
|
|
73
75
|
* Input provided when creating the machine actor.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer-core.types.js","sourceRoot":"","sources":["../../src/lib/installer-core.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { InstallerEventEmitter } from './events.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport type { Integration } from './constants.js';\nimport type { PackageManager } from './scaffold/scaffold.js';\nimport type { DeviceAuthResponse } from './device-auth.js';\nimport type { EnvFileInfo, DiscoveryResult } from './credential-discovery.js';\n\nexport type { EnvFileInfo, DiscoveryResult };\nexport type { DeviceAuthResponse };\n\n/**\n * How credentials were resolved.\n */\nexport type CredentialSource = 'cli' | 'env' | 'stored' | 'device' | 'manual';\n\n/**\n * Context passed to the wizard state machine.\n * Contains all data needed throughout the wizard flow.\n */\nexport interface InstallerMachineContext {\n /** Event emitter for UI communication */\n emitter: InstallerEventEmitter;\n /** CLI options from command line args */\n options: InstallerOptions;\n /** Detected or selected framework integration */\n integration: Integration | undefined;\n /** WorkOS credentials gathered from user */\n credentials: { apiKey?: string; clientId: string } | undefined;\n /** Whether git working directory is clean */\n gitIsClean: boolean;\n /** List of dirty git files (if any) */\n gitDirtyFiles: string[];\n /** Error that caused failure (if any) */\n error: Error | undefined;\n /** How credentials were resolved */\n credentialSource?: CredentialSource;\n /** Device auth state for UI display */\n deviceAuth?: {\n verificationUri: string;\n verificationUriComplete: string;\n userCode: string;\n };\n /** Whether user consented to env file scanning */\n envScanConsent?: boolean;\n /** Env files detected in project (before consent) */\n envFilesDetected?: string[];\n /** Path to env file where credentials were found */\n envCredentialPath?: string;\n /** Current git branch name */\n currentBranch?: string;\n /** Whether current branch is protected */\n isProtectedBranch?: boolean;\n /** Files changed during agent execution (for post-install) */\n changedFiles?: string[];\n /** AI-generated commit message */\n commitMessage?: string;\n /** AI-generated PR description */\n prDescription?: string;\n /** URL of created PR */\n prUrl?: string;\n /** Summary message from agent execution */\n agentSummary?: string;\n /** Whether the install directory is empty and can be scaffolded into */\n scaffoldable?: boolean;\n /** Package manager resolved for the scaffolded app */\n packageManager?: PackageManager;\n /** Whether to scaffold without prompting (headless mode or --scaffold) */\n autoScaffold?: boolean;\n /** Whether create-next-app actually ran and succeeded (for telemetry) */\n scaffolded?: boolean;\n}\n\n/**\n * Input provided when creating the machine actor.\n * These values initialize the context.\n */\nexport interface InstallerMachineInput {\n emitter: InstallerEventEmitter;\n options: InstallerOptions;\n}\n\n/**\n * All events the wizard machine can receive.\n */\nexport type InstallerMachineEvent =\n | { type: 'START' }\n | { type: 'SKIP_AUTH' }\n | { type: 'GIT_CONFIRMED' }\n | { type: 'GIT_CANCELLED' }\n // Scaffold events\n | { type: 'SCAFFOLD_CONFIRMED' }\n | { type: 'SCAFFOLD_CANCELLED' }\n | { type: 'CREDENTIALS_SUBMITTED'; apiKey: string; clientId: string }\n | { type: 'CANCEL' }\n // Credential discovery events\n | { type: 'ENV_SCAN_APPROVED' }\n | { type: 'ENV_SCAN_DECLINED' }\n | { type: 'RETRY_AUTH' }\n // Branch check events\n | { type: 'BRANCH_CREATE' }\n | { type: 'BRANCH_CONTINUE' }\n | { type: 'BRANCH_CANCEL' }\n // Post-install events\n | { type: 'COMMIT_APPROVED' }\n | { type: 'COMMIT_DECLINED' }\n | { type: 'PR_APPROVED' }\n | { type: 'PR_DECLINED' };\n\n/**\n * Output from the detection actor.\n */\nexport interface DetectionOutput {\n integration: Integration | undefined;\n}\n\n/**\n * Output from the git check actor.\n */\nexport interface GitCheckOutput {\n isClean: boolean;\n files: string[];\n}\n\n/**\n * Output from the agent actor.\n */\nexport interface AgentOutput {\n success: boolean;\n summary?: string;\n error?: Error;\n}\n\n/**\n * Output from the branch check actor.\n */\nexport interface BranchCheckOutput {\n branch: string | null;\n isProtected: boolean;\n}\n\n/**\n * Output from the workspace check actor (scaffold gate).\n */\nexport interface WorkspaceCheckOutput {\n /** Whether the install directory is empty enough to scaffold into */\n scaffoldable: boolean;\n /** Package manager resolved for the scaffolded app */\n packageManager: PackageManager;\n /** Whether to scaffold without prompting (headless or --scaffold) */\n autoScaffold: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"installer-core.types.js","sourceRoot":"","sources":["../../src/lib/installer-core.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { InstallerEventEmitter, CompletionData } from './events.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport type { Integration } from './constants.js';\nimport type { PackageManager } from './scaffold/scaffold.js';\nimport type { DeviceAuthResponse } from './device-auth.js';\nimport type { EnvFileInfo, DiscoveryResult } from './credential-discovery.js';\n\nexport type { EnvFileInfo, DiscoveryResult };\nexport type { DeviceAuthResponse };\n\n/**\n * How credentials were resolved.\n */\nexport type CredentialSource = 'cli' | 'env' | 'stored' | 'device' | 'manual';\n\n/**\n * Context passed to the wizard state machine.\n * Contains all data needed throughout the wizard flow.\n */\nexport interface InstallerMachineContext {\n /** Event emitter for UI communication */\n emitter: InstallerEventEmitter;\n /** CLI options from command line args */\n options: InstallerOptions;\n /** Detected or selected framework integration */\n integration: Integration | undefined;\n /** WorkOS credentials gathered from user */\n credentials: { apiKey?: string; clientId: string } | undefined;\n /** Whether git working directory is clean */\n gitIsClean: boolean;\n /** List of dirty git files (if any) */\n gitDirtyFiles: string[];\n /** Error that caused failure (if any) */\n error: Error | undefined;\n /** How credentials were resolved */\n credentialSource?: CredentialSource;\n /** Device auth state for UI display */\n deviceAuth?: {\n verificationUri: string;\n verificationUriComplete: string;\n userCode: string;\n };\n /** Whether user consented to env file scanning */\n envScanConsent?: boolean;\n /** Env files detected in project (before consent) */\n envFilesDetected?: string[];\n /** Path to env file where credentials were found */\n envCredentialPath?: string;\n /** Current git branch name */\n currentBranch?: string;\n /** Whether current branch is protected */\n isProtectedBranch?: boolean;\n /** Files changed during agent execution (for post-install) */\n changedFiles?: string[];\n /** AI-generated commit message */\n commitMessage?: string;\n /** AI-generated PR description */\n prDescription?: string;\n /** URL of created PR */\n prUrl?: string;\n /** Summary message from agent execution */\n agentSummary?: string;\n /** Whether the install directory is empty and can be scaffolded into */\n scaffoldable?: boolean;\n /** Package manager resolved for the scaffolded app */\n packageManager?: PackageManager;\n /** Whether to scaffold without prompting (headless mode or --scaffold) */\n autoScaffold?: boolean;\n /** Whether create-next-app actually ran and succeeded (for telemetry) */\n scaffolded?: boolean;\n /** Structured completion data for the success summary (built pre-complete) */\n completion?: CompletionData;\n}\n\n/**\n * Input provided when creating the machine actor.\n * These values initialize the context.\n */\nexport interface InstallerMachineInput {\n emitter: InstallerEventEmitter;\n options: InstallerOptions;\n}\n\n/**\n * All events the wizard machine can receive.\n */\nexport type InstallerMachineEvent =\n | { type: 'START' }\n | { type: 'SKIP_AUTH' }\n | { type: 'GIT_CONFIRMED' }\n | { type: 'GIT_CANCELLED' }\n // Scaffold events\n | { type: 'SCAFFOLD_CONFIRMED' }\n | { type: 'SCAFFOLD_CANCELLED' }\n | { type: 'CREDENTIALS_SUBMITTED'; apiKey: string; clientId: string }\n | { type: 'CANCEL' }\n // Credential discovery events\n | { type: 'ENV_SCAN_APPROVED' }\n | { type: 'ENV_SCAN_DECLINED' }\n | { type: 'RETRY_AUTH' }\n // Branch check events\n | { type: 'BRANCH_CREATE' }\n | { type: 'BRANCH_CONTINUE' }\n | { type: 'BRANCH_CANCEL' }\n // Post-install events\n | { type: 'COMMIT_APPROVED' }\n | { type: 'COMMIT_DECLINED' }\n | { type: 'PR_APPROVED' }\n | { type: 'PR_DECLINED' };\n\n/**\n * Output from the detection actor.\n */\nexport interface DetectionOutput {\n integration: Integration | undefined;\n}\n\n/**\n * Output from the git check actor.\n */\nexport interface GitCheckOutput {\n isClean: boolean;\n files: string[];\n}\n\n/**\n * Output from the agent actor.\n */\nexport interface AgentOutput {\n success: boolean;\n summary?: string;\n error?: Error;\n}\n\n/**\n * Output from the branch check actor.\n */\nexport interface BranchCheckOutput {\n branch: string | null;\n isProtected: boolean;\n}\n\n/**\n * Output from the workspace check actor (scaffold gate).\n */\nexport interface WorkspaceCheckOutput {\n /** Whether the install directory is empty enough to scaffold into */\n scaffoldable: boolean;\n /** Package manager resolved for the scaffolded app */\n packageManager: PackageManager;\n /** Whether to scaffold without prompting (headless or --scaffold) */\n autoScaffold: boolean;\n}\n"]}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
export type McpAgentKey = 'claude-code' | 'codex' | 'cursor';
|
|
2
2
|
export type McpOutcome = 'installed' | 'already-installed' | 'removed' | 'not-installed' | 'skipped' | 'failed';
|
|
3
|
+
/**
|
|
4
|
+
* Human phrasing for each outcome (JSON mode emits the raw `outcome` value).
|
|
5
|
+
* Lives with the `McpOutcome` type so every consumer (`mcp` command, `setup`)
|
|
6
|
+
* stays in lockstep when an outcome is added.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MCP_OUTCOME_LABELS: Record<McpOutcome, string>;
|
|
3
9
|
export interface McpClientResult {
|
|
4
10
|
agent: McpAgentKey;
|
|
5
11
|
displayName: string;
|
package/dist/lib/mcp-clients.js
CHANGED
|
@@ -31,6 +31,19 @@ const JSONC_PARSE_OPTIONS = {
|
|
|
31
31
|
const JSONC_MODIFY_OPTIONS = {
|
|
32
32
|
formattingOptions: { tabSize: 2, insertSpaces: true },
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Human phrasing for each outcome (JSON mode emits the raw `outcome` value).
|
|
36
|
+
* Lives with the `McpOutcome` type so every consumer (`mcp` command, `setup`)
|
|
37
|
+
* stays in lockstep when an outcome is added.
|
|
38
|
+
*/
|
|
39
|
+
export const MCP_OUTCOME_LABELS = {
|
|
40
|
+
installed: 'installed',
|
|
41
|
+
'already-installed': 'already installed',
|
|
42
|
+
removed: 'removed',
|
|
43
|
+
'not-installed': 'not installed',
|
|
44
|
+
skipped: 'skipped',
|
|
45
|
+
failed: 'failed',
|
|
46
|
+
};
|
|
34
47
|
/** Stable list of known agent keys, for `--agent` validation by callers. */
|
|
35
48
|
export const MCP_AGENT_KEYS = ['claude-code', 'codex', 'cursor'];
|
|
36
49
|
/** Async existence check — `access` rejects with ENOENT when the path is missing. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-clients.js","sourceRoot":"","sources":["../../src/lib/mcp-clients.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from 'os';\nimport { join } from 'path';\nimport { access, mkdir, readFile, writeFile } from 'fs/promises';\nimport * as jsonc from 'jsonc-parser';\nimport { execFileNoThrow } from '../utils/exec-file.js';\nimport { MCP_SERVER_NAME, MCP_SERVER_URL } from './constants.js';\n\n/**\n * Client-writer library for the WorkOS MCP server.\n *\n * One `McpClientTarget` interface, three implementations. Claude Code and Codex\n * are configured by shelling out to their own CLIs (robust to their config\n * format changes); Cursor has no CLI, so we merge `~/.cursor/mcp.json` directly\n * with `jsonc-parser` (hand-edited files may contain comments / trailing\n * commas). Every operation degrades to a reported outcome — a missing binary,\n * an old client without HTTP-transport support, or an unparseable config is a\n * `failed`/`skipped`/`not-installed` result, never a thrown error.\n *\n * The library owns detection and per-client config writing; callers (the `mcp`\n * command today; install-flow / doctor in Phase 2) stay thin. Nothing here may\n * assume it runs inside the `mcp` command.\n */\n\n/** 10s ceiling on every CLI shell-out so a hung client can't wedge the caller. */\nconst EXEC_TIMEOUT_MS = 10_000;\n\n/** jsonc parse options: tolerate the comments / trailing commas real users\n * hand-edit into `~/.cursor/mcp.json`, and an empty file, so only genuinely\n * malformed JSON is flagged. */\nconst JSONC_PARSE_OPTIONS: jsonc.ParseOptions = {\n allowTrailingComma: true,\n allowEmptyContent: true,\n};\n\nconst JSONC_MODIFY_OPTIONS: jsonc.ModificationOptions = {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n};\n\nexport type McpAgentKey = 'claude-code' | 'codex' | 'cursor';\n\nexport type McpOutcome = 'installed' | 'already-installed' | 'removed' | 'not-installed' | 'skipped' | 'failed';\n\nexport interface McpClientResult {\n agent: McpAgentKey;\n displayName: string;\n outcome: McpOutcome;\n /** stderr/message excerpt when `outcome === 'failed'`. */\n error?: string;\n}\n\nexport interface McpClientTarget {\n key: McpAgentKey;\n displayName: string;\n /** Agent is usable on this machine (config dir present AND, for CLI clients, binary runnable). */\n isAvailable(): Promise<boolean>;\n /** The WorkOS server is present in this client's config. */\n isInstalled(): Promise<boolean>;\n add(): Promise<McpClientResult>;\n remove(): Promise<McpClientResult>;\n}\n\n/** Stable list of known agent keys, for `--agent` validation by callers. */\nexport const MCP_AGENT_KEYS: McpAgentKey[] = ['claude-code', 'codex', 'cursor'];\n\n/** Async existence check — `access` rejects with ENOENT when the path is missing. */\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Trim a shell-out message to a single-line excerpt for the `error` field. */\nfunction excerpt(raw: string): string {\n const text = raw.trim();\n if (!text) return 'Unknown error';\n const firstLine = text.split('\\n').find((l) => l.trim().length > 0) ?? text;\n return firstLine.trim().slice(0, 300);\n}\n\n/**\n * Does a CLI `mcp list` output contain our server?\n *\n * Matches the first whitespace-delimited token of any line (with an optional\n * trailing colon stripped), which covers both list shapes we support:\n * - Claude Code: `workos: https://mcp.workos.com/mcp (HTTP) - ✔ Connected`\n * - Codex table: `workos https://mcp.workos.com/mcp ...`\n *\n * First-token matching avoids the substring collision a naive\n * `output.includes('workos')` would hit on an unrelated `workos-docs` entry.\n */\nfunction listHasServer(stdout: string, name: string): boolean {\n return stdout.split('\\n').some((line) => {\n const firstToken = line.trim().split(/\\s+/)[0] ?? '';\n return firstToken.replace(/:$/, '') === name;\n });\n}\n\n/**\n * Shared shell-out client for Claude Code and Codex. The two differ only in\n * binary name, config dir, and the `add` arg shape; every outcome-mapping rule\n * is identical, so they share one implementation.\n */\nfunction createCliClient(config: {\n key: McpAgentKey;\n displayName: string;\n binary: string;\n configDir: string;\n addArgs: string[];\n removeArgs: string[];\n}): McpClientTarget {\n const { key, displayName, binary, configDir, addArgs, removeArgs } = config;\n const result = (outcome: McpOutcome, error?: string): McpClientResult => ({\n agent: key,\n displayName,\n outcome,\n ...(error ? { error } : {}),\n });\n\n async function checkInstalled(): Promise<boolean> {\n const res = await execFileNoThrow(binary, ['mcp', 'list'], { timeout: EXEC_TIMEOUT_MS });\n if (res.status !== 0) return false;\n return listHasServer(res.stdout, MCP_SERVER_NAME);\n }\n\n return {\n key,\n displayName,\n async isAvailable() {\n // Two layers: the config dir can exist while the binary isn't on PATH,\n // and vice versa — require both before we try to shell out.\n if (!(await pathExists(join(homedir(), configDir)))) return false;\n const res = await execFileNoThrow(binary, ['--version'], { timeout: EXEC_TIMEOUT_MS });\n return res.status === 0;\n },\n isInstalled: checkInstalled,\n async add() {\n const res = await execFileNoThrow(binary, addArgs, { timeout: EXEC_TIMEOUT_MS });\n if (res.status === 0) return result('installed');\n // Idempotent: an \"already exists\" collision is a success, not a failure.\n const combined = `${res.stdout}\\n${res.stderr}`.toLowerCase();\n if (combined.includes('already exists') || combined.includes('already configured')) {\n return result('already-installed');\n }\n // A non-zero exit doesn't always mean the write failed: Codex persists the\n // server config and THEN starts an OAuth flow that blocks (no browser /\n // callback available here) until our timeout kills it with a non-zero\n // status. Confirm against the actual config before declaring failure —\n // more robust than matching each client's success wording.\n if (await checkInstalled()) return result('installed');\n // Otherwise a real failure — an old client lacking `--transport http` /\n // `--url`, a bad invocation, etc. Reported, never thrown.\n return result('failed', excerpt(res.stderr || res.stdout));\n },\n async remove() {\n const res = await execFileNoThrow(binary, removeArgs, { timeout: EXEC_TIMEOUT_MS });\n const combined = `${res.stdout}\\n${res.stderr}`.toLowerCase();\n // Claude exits 1 and Codex exits 0 when the server is absent; both print\n // \"No MCP server named ...\". Treat either as an idempotent no-op.\n if (combined.includes('no mcp server')) return result('not-installed');\n if (res.status === 0) return result('removed');\n return result('failed', excerpt(res.stderr || res.stdout));\n },\n };\n}\n\nfunction createClaudeCodeClient(): McpClientTarget {\n return createCliClient({\n key: 'claude-code',\n displayName: 'Claude Code',\n binary: 'claude',\n configDir: '.claude',\n // User scope: the management MCP is account-level, not per-repo — project\n // scope would nag teammates via checked-in config.\n addArgs: ['mcp', 'add', '--transport', 'http', '--scope', 'user', MCP_SERVER_NAME, MCP_SERVER_URL],\n removeArgs: ['mcp', 'remove', '--scope', 'user', MCP_SERVER_NAME],\n });\n}\n\nfunction createCodexClient(): McpClientTarget {\n return createCliClient({\n key: 'codex',\n displayName: 'Codex',\n binary: 'codex',\n configDir: '.codex',\n addArgs: ['mcp', 'add', MCP_SERVER_NAME, '--url', MCP_SERVER_URL],\n removeArgs: ['mcp', 'remove', MCP_SERVER_NAME],\n });\n}\n\n/**\n * Cursor has no CLI, so we read-modify-write `~/.cursor/mcp.json` directly with\n * `jsonc-parser`, preserving existing servers, comments, and formatting.\n */\nfunction createCursorClient(): McpClientTarget {\n const key: McpAgentKey = 'cursor';\n const displayName = 'Cursor';\n const cursorDir = () => join(homedir(), '.cursor');\n const configPath = () => join(cursorDir(), 'mcp.json');\n const result = (outcome: McpOutcome, error?: string): McpClientResult => ({\n agent: key,\n displayName,\n outcome,\n ...(error ? { error } : {}),\n });\n\n /** Read + parse the config. `parseError` is true only for genuinely malformed\n * JSON (not comments / trailing commas / empty). */\n async function readConfig(): Promise<{\n content: string;\n parsed: Record<string, unknown> | undefined;\n parseError: boolean;\n exists: boolean;\n }> {\n const path = configPath();\n if (!(await pathExists(path))) {\n return { content: '', parsed: undefined, parseError: false, exists: false };\n }\n const content = await readFile(path, 'utf8');\n const errors: jsonc.ParseError[] = [];\n const parsed = jsonc.parse(content, errors, JSONC_PARSE_OPTIONS) as Record<string, unknown> | undefined;\n return { content, parsed, parseError: errors.length > 0, exists: true };\n }\n\n function hasWorkosServer(parsed: Record<string, unknown> | undefined): boolean {\n const servers = parsed?.mcpServers;\n return Boolean(servers && typeof servers === 'object' && MCP_SERVER_NAME in (servers as object));\n }\n\n return {\n key,\n displayName,\n async isAvailable() {\n return pathExists(cursorDir());\n },\n async isInstalled() {\n try {\n const { parsed, parseError } = await readConfig();\n if (parseError) return false;\n return hasWorkosServer(parsed);\n } catch {\n return false;\n }\n },\n async add() {\n const path = configPath();\n try {\n const { content, parseError, exists } = await readConfig();\n // Never overwrite a file we couldn't parse — the user must fix it first.\n if (exists && parseError) {\n return result('failed', `Could not parse ${path}; fix it manually and retry.`);\n }\n await mkdir(cursorDir(), { recursive: true });\n // Converge to our URL — an existing `workos` key with a different URL is\n // overwritten (reported as `installed`).\n const edits = jsonc.modify(\n content,\n ['mcpServers', MCP_SERVER_NAME],\n { url: MCP_SERVER_URL },\n JSONC_MODIFY_OPTIONS,\n );\n await writeFile(path, jsonc.applyEdits(content, edits), 'utf8');\n return result('installed');\n } catch (error) {\n return result('failed', error instanceof Error ? error.message : 'Unknown error');\n }\n },\n async remove() {\n const path = configPath();\n try {\n const { content, parsed, parseError, exists } = await readConfig();\n if (!exists) return result('not-installed');\n if (parseError) {\n return result('failed', `Could not parse ${path}; fix it manually and retry.`);\n }\n if (!hasWorkosServer(parsed)) return result('not-installed');\n const edits = jsonc.modify(content, ['mcpServers', MCP_SERVER_NAME], undefined, JSONC_MODIFY_OPTIONS);\n await writeFile(path, jsonc.applyEdits(content, edits), 'utf8');\n return result('removed');\n } catch (error) {\n return result('failed', error instanceof Error ? error.message : 'Unknown error');\n }\n },\n };\n}\n\n/** The three client targets, in a stable order. */\nexport function createMcpClients(): McpClientTarget[] {\n return [createClaudeCodeClient(), createCodexClient(), createCursorClient()];\n}\n\n/**\n * The URL the WorkOS server is configured with in Cursor's `~/.cursor/mcp.json`,\n * or null when the file/entry is absent, unreadable, or unparseable.\n *\n * Cursor is the only client whose config we read directly (the CLI clients don't\n * expose per-entry URLs), so this powers doctor's URL-drift (\"misconfigured\")\n * check without a second jsonc reader duplicating the config schema. Read-only\n * and never throws — a problem reading just yields null.\n */\nexport async function getCursorConfiguredUrl(): Promise<string | null> {\n try {\n const path = join(homedir(), '.cursor', 'mcp.json');\n if (!(await pathExists(path))) return null;\n const content = await readFile(path, 'utf8');\n const parsed = jsonc.parse(content, [], JSONC_PARSE_OPTIONS) as Record<string, unknown> | undefined;\n const servers = parsed?.mcpServers as Record<string, unknown> | undefined;\n const entry = servers?.[MCP_SERVER_NAME] as { url?: unknown } | undefined;\n return typeof entry?.url === 'string' ? entry.url : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Return only the clients available on this machine, optionally narrowed to\n * `agentFilter` keys. Availability is probed in parallel. An unknown filter key\n * simply matches nothing here — callers validate keys and surface the error.\n */\nexport async function detectMcpClients(agentFilter?: string[]): Promise<McpClientTarget[]> {\n const clients = createMcpClients();\n const filtered = agentFilter ? clients.filter((c) => agentFilter.includes(c.key)) : clients;\n const availability = await Promise.all(filtered.map((c) => c.isAvailable()));\n return filtered.filter((_, i) => availability[i]);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mcp-clients.js","sourceRoot":"","sources":["../../src/lib/mcp-clients.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from 'os';\nimport { join } from 'path';\nimport { access, mkdir, readFile, writeFile } from 'fs/promises';\nimport * as jsonc from 'jsonc-parser';\nimport { execFileNoThrow } from '../utils/exec-file.js';\nimport { MCP_SERVER_NAME, MCP_SERVER_URL } from './constants.js';\n\n/**\n * Client-writer library for the WorkOS MCP server.\n *\n * One `McpClientTarget` interface, three implementations. Claude Code and Codex\n * are configured by shelling out to their own CLIs (robust to their config\n * format changes); Cursor has no CLI, so we merge `~/.cursor/mcp.json` directly\n * with `jsonc-parser` (hand-edited files may contain comments / trailing\n * commas). Every operation degrades to a reported outcome — a missing binary,\n * an old client without HTTP-transport support, or an unparseable config is a\n * `failed`/`skipped`/`not-installed` result, never a thrown error.\n *\n * The library owns detection and per-client config writing; callers (the `mcp`\n * command today; install-flow / doctor in Phase 2) stay thin. Nothing here may\n * assume it runs inside the `mcp` command.\n */\n\n/** 10s ceiling on every CLI shell-out so a hung client can't wedge the caller. */\nconst EXEC_TIMEOUT_MS = 10_000;\n\n/** jsonc parse options: tolerate the comments / trailing commas real users\n * hand-edit into `~/.cursor/mcp.json`, and an empty file, so only genuinely\n * malformed JSON is flagged. */\nconst JSONC_PARSE_OPTIONS: jsonc.ParseOptions = {\n allowTrailingComma: true,\n allowEmptyContent: true,\n};\n\nconst JSONC_MODIFY_OPTIONS: jsonc.ModificationOptions = {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n};\n\nexport type McpAgentKey = 'claude-code' | 'codex' | 'cursor';\n\nexport type McpOutcome = 'installed' | 'already-installed' | 'removed' | 'not-installed' | 'skipped' | 'failed';\n\n/**\n * Human phrasing for each outcome (JSON mode emits the raw `outcome` value).\n * Lives with the `McpOutcome` type so every consumer (`mcp` command, `setup`)\n * stays in lockstep when an outcome is added.\n */\nexport const MCP_OUTCOME_LABELS: Record<McpOutcome, string> = {\n installed: 'installed',\n 'already-installed': 'already installed',\n removed: 'removed',\n 'not-installed': 'not installed',\n skipped: 'skipped',\n failed: 'failed',\n};\n\nexport interface McpClientResult {\n agent: McpAgentKey;\n displayName: string;\n outcome: McpOutcome;\n /** stderr/message excerpt when `outcome === 'failed'`. */\n error?: string;\n}\n\nexport interface McpClientTarget {\n key: McpAgentKey;\n displayName: string;\n /** Agent is usable on this machine (config dir present AND, for CLI clients, binary runnable). */\n isAvailable(): Promise<boolean>;\n /** The WorkOS server is present in this client's config. */\n isInstalled(): Promise<boolean>;\n add(): Promise<McpClientResult>;\n remove(): Promise<McpClientResult>;\n}\n\n/** Stable list of known agent keys, for `--agent` validation by callers. */\nexport const MCP_AGENT_KEYS: McpAgentKey[] = ['claude-code', 'codex', 'cursor'];\n\n/** Async existence check — `access` rejects with ENOENT when the path is missing. */\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Trim a shell-out message to a single-line excerpt for the `error` field. */\nfunction excerpt(raw: string): string {\n const text = raw.trim();\n if (!text) return 'Unknown error';\n const firstLine = text.split('\\n').find((l) => l.trim().length > 0) ?? text;\n return firstLine.trim().slice(0, 300);\n}\n\n/**\n * Does a CLI `mcp list` output contain our server?\n *\n * Matches the first whitespace-delimited token of any line (with an optional\n * trailing colon stripped), which covers both list shapes we support:\n * - Claude Code: `workos: https://mcp.workos.com/mcp (HTTP) - ✔ Connected`\n * - Codex table: `workos https://mcp.workos.com/mcp ...`\n *\n * First-token matching avoids the substring collision a naive\n * `output.includes('workos')` would hit on an unrelated `workos-docs` entry.\n */\nfunction listHasServer(stdout: string, name: string): boolean {\n return stdout.split('\\n').some((line) => {\n const firstToken = line.trim().split(/\\s+/)[0] ?? '';\n return firstToken.replace(/:$/, '') === name;\n });\n}\n\n/**\n * Shared shell-out client for Claude Code and Codex. The two differ only in\n * binary name, config dir, and the `add` arg shape; every outcome-mapping rule\n * is identical, so they share one implementation.\n */\nfunction createCliClient(config: {\n key: McpAgentKey;\n displayName: string;\n binary: string;\n configDir: string;\n addArgs: string[];\n removeArgs: string[];\n}): McpClientTarget {\n const { key, displayName, binary, configDir, addArgs, removeArgs } = config;\n const result = (outcome: McpOutcome, error?: string): McpClientResult => ({\n agent: key,\n displayName,\n outcome,\n ...(error ? { error } : {}),\n });\n\n async function checkInstalled(): Promise<boolean> {\n const res = await execFileNoThrow(binary, ['mcp', 'list'], { timeout: EXEC_TIMEOUT_MS });\n if (res.status !== 0) return false;\n return listHasServer(res.stdout, MCP_SERVER_NAME);\n }\n\n return {\n key,\n displayName,\n async isAvailable() {\n // Two layers: the config dir can exist while the binary isn't on PATH,\n // and vice versa — require both before we try to shell out.\n if (!(await pathExists(join(homedir(), configDir)))) return false;\n const res = await execFileNoThrow(binary, ['--version'], { timeout: EXEC_TIMEOUT_MS });\n return res.status === 0;\n },\n isInstalled: checkInstalled,\n async add() {\n const res = await execFileNoThrow(binary, addArgs, { timeout: EXEC_TIMEOUT_MS });\n if (res.status === 0) return result('installed');\n // Idempotent: an \"already exists\" collision is a success, not a failure.\n const combined = `${res.stdout}\\n${res.stderr}`.toLowerCase();\n if (combined.includes('already exists') || combined.includes('already configured')) {\n return result('already-installed');\n }\n // A non-zero exit doesn't always mean the write failed: Codex persists the\n // server config and THEN starts an OAuth flow that blocks (no browser /\n // callback available here) until our timeout kills it with a non-zero\n // status. Confirm against the actual config before declaring failure —\n // more robust than matching each client's success wording.\n if (await checkInstalled()) return result('installed');\n // Otherwise a real failure — an old client lacking `--transport http` /\n // `--url`, a bad invocation, etc. Reported, never thrown.\n return result('failed', excerpt(res.stderr || res.stdout));\n },\n async remove() {\n const res = await execFileNoThrow(binary, removeArgs, { timeout: EXEC_TIMEOUT_MS });\n const combined = `${res.stdout}\\n${res.stderr}`.toLowerCase();\n // Claude exits 1 and Codex exits 0 when the server is absent; both print\n // \"No MCP server named ...\". Treat either as an idempotent no-op.\n if (combined.includes('no mcp server')) return result('not-installed');\n if (res.status === 0) return result('removed');\n return result('failed', excerpt(res.stderr || res.stdout));\n },\n };\n}\n\nfunction createClaudeCodeClient(): McpClientTarget {\n return createCliClient({\n key: 'claude-code',\n displayName: 'Claude Code',\n binary: 'claude',\n configDir: '.claude',\n // User scope: the management MCP is account-level, not per-repo — project\n // scope would nag teammates via checked-in config.\n addArgs: ['mcp', 'add', '--transport', 'http', '--scope', 'user', MCP_SERVER_NAME, MCP_SERVER_URL],\n removeArgs: ['mcp', 'remove', '--scope', 'user', MCP_SERVER_NAME],\n });\n}\n\nfunction createCodexClient(): McpClientTarget {\n return createCliClient({\n key: 'codex',\n displayName: 'Codex',\n binary: 'codex',\n configDir: '.codex',\n addArgs: ['mcp', 'add', MCP_SERVER_NAME, '--url', MCP_SERVER_URL],\n removeArgs: ['mcp', 'remove', MCP_SERVER_NAME],\n });\n}\n\n/**\n * Cursor has no CLI, so we read-modify-write `~/.cursor/mcp.json` directly with\n * `jsonc-parser`, preserving existing servers, comments, and formatting.\n */\nfunction createCursorClient(): McpClientTarget {\n const key: McpAgentKey = 'cursor';\n const displayName = 'Cursor';\n const cursorDir = () => join(homedir(), '.cursor');\n const configPath = () => join(cursorDir(), 'mcp.json');\n const result = (outcome: McpOutcome, error?: string): McpClientResult => ({\n agent: key,\n displayName,\n outcome,\n ...(error ? { error } : {}),\n });\n\n /** Read + parse the config. `parseError` is true only for genuinely malformed\n * JSON (not comments / trailing commas / empty). */\n async function readConfig(): Promise<{\n content: string;\n parsed: Record<string, unknown> | undefined;\n parseError: boolean;\n exists: boolean;\n }> {\n const path = configPath();\n if (!(await pathExists(path))) {\n return { content: '', parsed: undefined, parseError: false, exists: false };\n }\n const content = await readFile(path, 'utf8');\n const errors: jsonc.ParseError[] = [];\n const parsed = jsonc.parse(content, errors, JSONC_PARSE_OPTIONS) as Record<string, unknown> | undefined;\n return { content, parsed, parseError: errors.length > 0, exists: true };\n }\n\n function hasWorkosServer(parsed: Record<string, unknown> | undefined): boolean {\n const servers = parsed?.mcpServers;\n return Boolean(servers && typeof servers === 'object' && MCP_SERVER_NAME in (servers as object));\n }\n\n return {\n key,\n displayName,\n async isAvailable() {\n return pathExists(cursorDir());\n },\n async isInstalled() {\n try {\n const { parsed, parseError } = await readConfig();\n if (parseError) return false;\n return hasWorkosServer(parsed);\n } catch {\n return false;\n }\n },\n async add() {\n const path = configPath();\n try {\n const { content, parseError, exists } = await readConfig();\n // Never overwrite a file we couldn't parse — the user must fix it first.\n if (exists && parseError) {\n return result('failed', `Could not parse ${path}; fix it manually and retry.`);\n }\n await mkdir(cursorDir(), { recursive: true });\n // Converge to our URL — an existing `workos` key with a different URL is\n // overwritten (reported as `installed`).\n const edits = jsonc.modify(\n content,\n ['mcpServers', MCP_SERVER_NAME],\n { url: MCP_SERVER_URL },\n JSONC_MODIFY_OPTIONS,\n );\n await writeFile(path, jsonc.applyEdits(content, edits), 'utf8');\n return result('installed');\n } catch (error) {\n return result('failed', error instanceof Error ? error.message : 'Unknown error');\n }\n },\n async remove() {\n const path = configPath();\n try {\n const { content, parsed, parseError, exists } = await readConfig();\n if (!exists) return result('not-installed');\n if (parseError) {\n return result('failed', `Could not parse ${path}; fix it manually and retry.`);\n }\n if (!hasWorkosServer(parsed)) return result('not-installed');\n const edits = jsonc.modify(content, ['mcpServers', MCP_SERVER_NAME], undefined, JSONC_MODIFY_OPTIONS);\n await writeFile(path, jsonc.applyEdits(content, edits), 'utf8');\n return result('removed');\n } catch (error) {\n return result('failed', error instanceof Error ? error.message : 'Unknown error');\n }\n },\n };\n}\n\n/** The three client targets, in a stable order. */\nexport function createMcpClients(): McpClientTarget[] {\n return [createClaudeCodeClient(), createCodexClient(), createCursorClient()];\n}\n\n/**\n * The URL the WorkOS server is configured with in Cursor's `~/.cursor/mcp.json`,\n * or null when the file/entry is absent, unreadable, or unparseable.\n *\n * Cursor is the only client whose config we read directly (the CLI clients don't\n * expose per-entry URLs), so this powers doctor's URL-drift (\"misconfigured\")\n * check without a second jsonc reader duplicating the config schema. Read-only\n * and never throws — a problem reading just yields null.\n */\nexport async function getCursorConfiguredUrl(): Promise<string | null> {\n try {\n const path = join(homedir(), '.cursor', 'mcp.json');\n if (!(await pathExists(path))) return null;\n const content = await readFile(path, 'utf8');\n const parsed = jsonc.parse(content, [], JSONC_PARSE_OPTIONS) as Record<string, unknown> | undefined;\n const servers = parsed?.mcpServers as Record<string, unknown> | undefined;\n const entry = servers?.[MCP_SERVER_NAME] as { url?: unknown } | undefined;\n return typeof entry?.url === 'string' ? entry.url : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Return only the clients available on this machine, optionally narrowed to\n * `agentFilter` keys. Availability is probed in parallel. An unknown filter key\n * simply matches nothing here — callers validate keys and surface the error.\n */\nexport async function detectMcpClients(agentFilter?: string[]): Promise<McpClientTarget[]> {\n const clients = createMcpClients();\n const filtered = agentFilter ? clients.filter((c) => agentFilter.includes(c.key)) : clients;\n const availability = await Promise.all(filtered.map((c) => c.isAvailable()));\n return filtered.filter((_, i) => availability[i]);\n}\n"]}
|