workos 0.0.24 → 0.1.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/.claude-plugin/plugin.json +13 -0
- package/LICENSE +47 -0
- package/README.md +154 -1
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +163 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.config.d.ts +52 -0
- package/dist/cli.config.js +70 -0
- package/dist/cli.config.js.map +1 -0
- package/dist/package.json +87 -0
- package/dist/src/commands/install-skill.d.ts +20 -0
- package/dist/src/commands/install-skill.js +130 -0
- package/dist/src/commands/install-skill.js.map +1 -0
- package/dist/src/commands/install.d.ts +22 -0
- package/dist/src/commands/install.js +57 -0
- package/dist/src/commands/install.js.map +1 -0
- package/dist/src/commands/login.d.ts +1 -0
- package/dist/src/commands/login.js +141 -0
- package/dist/src/commands/login.js.map +1 -0
- package/dist/src/commands/logout.d.ts +1 -0
- package/dist/src/commands/logout.js +17 -0
- package/dist/src/commands/logout.js.map +1 -0
- package/dist/src/dashboard/components/AnimatedLogo.d.ts +8 -0
- package/dist/src/dashboard/components/AnimatedLogo.js +16 -0
- package/dist/src/dashboard/components/AnimatedLogo.js.map +1 -0
- package/dist/src/dashboard/components/CompletionView.d.ts +13 -0
- package/dist/src/dashboard/components/CompletionView.js +21 -0
- package/dist/src/dashboard/components/CompletionView.js.map +1 -0
- package/dist/src/dashboard/components/ConfirmPrompt.d.ts +9 -0
- package/dist/src/dashboard/components/ConfirmPrompt.js +25 -0
- package/dist/src/dashboard/components/ConfirmPrompt.js.map +1 -0
- package/dist/src/dashboard/components/CredentialsForm.d.ts +10 -0
- package/dist/src/dashboard/components/CredentialsForm.js +47 -0
- package/dist/src/dashboard/components/CredentialsForm.js.map +1 -0
- package/dist/src/dashboard/components/Dashboard.d.ts +3 -0
- package/dist/src/dashboard/components/Dashboard.js +100 -0
- package/dist/src/dashboard/components/Dashboard.js.map +1 -0
- package/dist/src/dashboard/components/DashboardLayout.d.ts +24 -0
- package/dist/src/dashboard/components/DashboardLayout.js +25 -0
- package/dist/src/dashboard/components/DashboardLayout.js.map +1 -0
- package/dist/src/dashboard/components/DiffPanel.d.ts +9 -0
- package/dist/src/dashboard/components/DiffPanel.js +136 -0
- package/dist/src/dashboard/components/DiffPanel.js.map +1 -0
- package/dist/src/dashboard/components/InlinePrompt.d.ts +8 -0
- package/dist/src/dashboard/components/InlinePrompt.js +19 -0
- package/dist/src/dashboard/components/InlinePrompt.js.map +1 -0
- package/dist/src/dashboard/components/OutputPanel.d.ts +10 -0
- package/dist/src/dashboard/components/OutputPanel.js +100 -0
- package/dist/src/dashboard/components/OutputPanel.js.map +1 -0
- package/dist/src/dashboard/components/Panel.d.ts +12 -0
- package/dist/src/dashboard/components/Panel.js +6 -0
- package/dist/src/dashboard/components/Panel.js.map +1 -0
- package/dist/src/dashboard/components/TextInput.d.ts +13 -0
- package/dist/src/dashboard/components/TextInput.js +57 -0
- package/dist/src/dashboard/components/TextInput.js.map +1 -0
- package/dist/src/dashboard/components/WelcomeArt.d.ts +2 -0
- package/dist/src/dashboard/components/WelcomeArt.js +9 -0
- package/dist/src/dashboard/components/WelcomeArt.js.map +1 -0
- package/dist/src/dashboard/hooks/useAnimation.d.ts +7 -0
- package/dist/src/dashboard/hooks/useAnimation.js +24 -0
- package/dist/src/dashboard/hooks/useAnimation.js.map +1 -0
- package/dist/src/dashboard/hooks/useKeyboard.d.ts +8 -0
- package/dist/src/dashboard/hooks/useKeyboard.js +18 -0
- package/dist/src/dashboard/hooks/useKeyboard.js.map +1 -0
- package/dist/src/dashboard/hooks/useTerminalSize.d.ts +8 -0
- package/dist/src/dashboard/hooks/useTerminalSize.js +23 -0
- package/dist/src/dashboard/hooks/useTerminalSize.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +6 -0
- package/dist/src/dashboard/index.js +36 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/lib/diff-utils.d.ts +21 -0
- package/dist/src/dashboard/lib/diff-utils.js +271 -0
- package/dist/src/dashboard/lib/diff-utils.js.map +1 -0
- package/dist/src/dashboard/lib/logo-frames.d.ts +20 -0
- package/dist/src/dashboard/lib/logo-frames.js +109 -0
- package/dist/src/dashboard/lib/logo-frames.js.map +1 -0
- package/dist/src/dashboard/lib/welcome-art.d.ts +1 -0
- package/dist/src/dashboard/lib/welcome-art.js +5 -0
- package/dist/src/dashboard/lib/welcome-art.js.map +1 -0
- package/dist/src/dashboard/types.d.ts +5 -0
- package/dist/src/dashboard/types.js +2 -0
- package/dist/src/dashboard/types.js.map +1 -0
- package/dist/src/lib/__tests__/test-utils.d.ts +40 -0
- package/dist/src/lib/__tests__/test-utils.js +108 -0
- package/dist/src/lib/__tests__/test-utils.js.map +1 -0
- package/dist/src/lib/adapters/cli-adapter.d.ts +56 -0
- package/dist/src/lib/adapters/cli-adapter.js +318 -0
- package/dist/src/lib/adapters/cli-adapter.js.map +1 -0
- package/dist/src/lib/adapters/dashboard-adapter.d.ts +30 -0
- package/dist/src/lib/adapters/dashboard-adapter.js +97 -0
- package/dist/src/lib/adapters/dashboard-adapter.js.map +1 -0
- package/dist/src/lib/adapters/index.d.ts +3 -0
- package/dist/src/lib/adapters/index.js +3 -0
- package/dist/src/lib/adapters/index.js.map +1 -0
- package/dist/src/lib/adapters/types.d.ts +41 -0
- package/dist/src/lib/adapters/types.js +2 -0
- package/dist/src/lib/adapters/types.js.map +1 -0
- package/dist/src/lib/agent-interface.d.ts +75 -0
- package/dist/src/lib/agent-interface.js +563 -0
- package/dist/src/lib/agent-interface.js.map +1 -0
- package/dist/src/lib/agent-runner.d.ts +9 -0
- package/dist/src/lib/agent-runner.js +213 -0
- package/dist/src/lib/agent-runner.js.map +1 -0
- package/dist/src/lib/api.d.ts +25 -0
- package/dist/src/lib/api.js +120 -0
- package/dist/src/lib/api.js.map +1 -0
- package/dist/src/lib/config.d.ts +60 -0
- package/dist/src/lib/config.js +88 -0
- package/dist/src/lib/config.js.map +1 -0
- package/dist/src/lib/constants.d.ts +32 -0
- package/dist/src/lib/constants.js +53 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/credentials.d.ts +19 -0
- package/dist/src/lib/credentials.js +55 -0
- package/dist/src/lib/credentials.js.map +1 -0
- package/dist/src/lib/env-writer.d.ts +14 -0
- package/dist/src/lib/env-writer.js +39 -0
- package/dist/src/lib/env-writer.js.map +1 -0
- package/dist/src/lib/events.d.ts +114 -0
- package/dist/src/lib/events.js +19 -0
- package/dist/src/lib/events.js.map +1 -0
- package/dist/src/lib/framework-config.d.ts +108 -0
- package/dist/src/lib/framework-config.js +11 -0
- package/dist/src/lib/framework-config.js.map +1 -0
- package/dist/src/lib/helper-functions.d.ts +1 -0
- package/dist/src/lib/helper-functions.js +2 -0
- package/dist/src/lib/helper-functions.js.map +1 -0
- package/dist/src/lib/port-detection.d.ts +7 -0
- package/dist/src/lib/port-detection.js +112 -0
- package/dist/src/lib/port-detection.js.map +1 -0
- package/dist/src/lib/progress-tracker.d.ts +22 -0
- package/dist/src/lib/progress-tracker.js +47 -0
- package/dist/src/lib/progress-tracker.js.map +1 -0
- package/dist/src/lib/run-with-core.d.ts +2 -0
- package/dist/src/lib/run-with-core.js +266 -0
- package/dist/src/lib/run-with-core.js.map +1 -0
- package/dist/src/lib/safe-tools.d.ts +2 -0
- package/dist/src/lib/safe-tools.js +212 -0
- package/dist/src/lib/safe-tools.js.map +1 -0
- package/dist/src/lib/settings.d.ts +59 -0
- package/dist/src/lib/settings.js +36 -0
- package/dist/src/lib/settings.js.map +1 -0
- package/dist/src/lib/token-refresh.d.ts +12 -0
- package/dist/src/lib/token-refresh.js +26 -0
- package/dist/src/lib/token-refresh.js.map +1 -0
- package/dist/src/lib/validation/build-validator.d.ts +9 -0
- package/dist/src/lib/validation/build-validator.js +118 -0
- package/dist/src/lib/validation/build-validator.js.map +1 -0
- package/dist/src/lib/validation/index.d.ts +3 -0
- package/dist/src/lib/validation/index.js +3 -0
- package/dist/src/lib/validation/index.js.map +1 -0
- package/dist/src/lib/validation/types.d.ts +41 -0
- package/dist/src/lib/validation/types.js +2 -0
- package/dist/src/lib/validation/types.js.map +1 -0
- package/dist/src/lib/validation/validator.d.ts +6 -0
- package/dist/src/lib/validation/validator.js +647 -0
- package/dist/src/lib/validation/validator.js.map +1 -0
- package/dist/src/lib/wizard-core.d.ts +200 -0
- package/dist/src/lib/wizard-core.js +392 -0
- package/dist/src/lib/wizard-core.js.map +1 -0
- package/dist/src/lib/wizard-core.types.d.ts +73 -0
- package/dist/src/lib/wizard-core.types.js +2 -0
- package/dist/src/lib/wizard-core.types.js.map +1 -0
- package/dist/src/lib/workos-management.d.ts +32 -0
- package/dist/src/lib/workos-management.js +142 -0
- package/dist/src/lib/workos-management.js.map +1 -0
- package/dist/src/nextjs/nextjs-wizard-agent.d.ts +6 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js +97 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -0
- package/dist/src/nextjs/utils.d.ts +8 -0
- package/dist/src/nextjs/utils.js +53 -0
- package/dist/src/nextjs/utils.js.map +1 -0
- package/dist/src/react/react-wizard-agent.d.ts +2 -0
- package/dist/src/react/react-wizard-agent.js +47 -0
- package/dist/src/react/react-wizard-agent.js.map +1 -0
- package/dist/src/react-router/react-router-wizard-agent.d.ts +6 -0
- package/dist/src/react-router/react-router-wizard-agent.js +103 -0
- package/dist/src/react-router/react-router-wizard-agent.js.map +1 -0
- package/dist/src/react-router/utils.d.ts +19 -0
- package/dist/src/react-router/utils.js +210 -0
- package/dist/src/react-router/utils.js.map +1 -0
- package/dist/src/run.d.ts +24 -0
- package/dist/src/run.js +48 -0
- package/dist/src/run.js.map +1 -0
- package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
- package/dist/src/steps/add-or-update-environment-variables.js +155 -0
- package/dist/src/steps/add-or-update-environment-variables.js.map +1 -0
- package/dist/src/steps/index.d.ts +3 -0
- package/dist/src/steps/index.js +4 -0
- package/dist/src/steps/index.js.map +1 -0
- package/dist/src/steps/run-prettier.d.ts +5 -0
- package/dist/src/steps/run-prettier.js +54 -0
- package/dist/src/steps/run-prettier.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +7 -0
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
- package/dist/src/steps/upload-environment-variables/index.js +57 -0
- package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js +104 -0
- package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +2 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +49 -0
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
- package/dist/src/telemetry.d.ts +2 -0
- package/dist/src/telemetry.js +29 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/src/utils/analytics.d.ts +24 -0
- package/dist/src/utils/analytics.js +139 -0
- package/dist/src/utils/analytics.js.map +1 -0
- package/dist/src/utils/bash.d.ts +2 -0
- package/dist/src/utils/bash.js +17 -0
- package/dist/src/utils/bash.js.map +1 -0
- package/dist/src/utils/clack-utils.d.ts +93 -0
- package/dist/src/utils/clack-utils.js +397 -0
- package/dist/src/utils/clack-utils.js.map +1 -0
- package/dist/src/utils/clack.d.ts +5 -0
- package/dist/src/utils/clack.js +34 -0
- package/dist/src/utils/clack.js.map +1 -0
- package/dist/src/utils/cli-symbols.d.ts +32 -0
- package/dist/src/utils/cli-symbols.js +46 -0
- package/dist/src/utils/cli-symbols.js.map +1 -0
- package/dist/src/utils/debug.d.ts +7 -0
- package/dist/src/utils/debug.js +88 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/env-parser.d.ts +5 -0
- package/dist/src/utils/env-parser.js +18 -0
- package/dist/src/utils/env-parser.js.map +1 -0
- package/dist/src/utils/environment.d.ts +4 -0
- package/dist/src/utils/environment.js +69 -0
- package/dist/src/utils/environment.js.map +1 -0
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +7 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logging.d.ts +9 -0
- package/dist/src/utils/logging.js +36 -0
- package/dist/src/utils/logging.js.map +1 -0
- package/dist/src/utils/package-json.d.ts +25 -0
- package/dist/src/utils/package-json.js +21 -0
- package/dist/src/utils/package-json.js.map +1 -0
- package/dist/src/utils/package-manager.d.ts +21 -0
- package/dist/src/utils/package-manager.js +167 -0
- package/dist/src/utils/package-manager.js.map +1 -0
- package/dist/src/utils/redact.d.ts +5 -0
- package/dist/src/utils/redact.js +29 -0
- package/dist/src/utils/redact.js.map +1 -0
- package/dist/src/utils/semver.d.ts +10 -0
- package/dist/src/utils/semver.js +43 -0
- package/dist/src/utils/semver.js.map +1 -0
- package/dist/src/utils/string.d.ts +1 -0
- package/dist/src/utils/string.js +6 -0
- package/dist/src/utils/string.js.map +1 -0
- package/dist/src/utils/telemetry-client.d.ts +15 -0
- package/dist/src/utils/telemetry-client.js +57 -0
- package/dist/src/utils/telemetry-client.js.map +1 -0
- package/dist/src/utils/telemetry-types.d.ts +51 -0
- package/dist/src/utils/telemetry-types.js +6 -0
- package/dist/src/utils/telemetry-types.js.map +1 -0
- package/dist/src/utils/types.d.ts +80 -0
- package/dist/src/utils/types.js +2 -0
- package/dist/src/utils/types.js.map +1 -0
- package/dist/src/utils/urls.d.ts +7 -0
- package/dist/src/utils/urls.js +8 -0
- package/dist/src/utils/urls.js.map +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js +21 -0
- package/dist/src/utils/vendor/is-unicorn-supported.js.map +1 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +2 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js +47 -0
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +1 -0
- package/package.json +76 -84
- package/skills/workos-authkit-base/SKILL.md +113 -0
- package/skills/workos-authkit-nextjs/SKILL.md +115 -0
- package/skills/workos-authkit-react/SKILL.md +91 -0
- package/skills/workos-authkit-react-router/SKILL.md +106 -0
- package/skills/workos-authkit-tanstack-start/SKILL.md +104 -0
- package/skills/workos-authkit-vanilla-js/SKILL.md +81 -0
- package/build/apps/index.js +0 -50
- package/build/apps/slack.js +0 -151
- package/build/cli.js +0 -42
- package/build/config.js +0 -34
- package/build/dev.js +0 -5
- package/build/enable-api-access.png +0 -0
- package/build/groups.js +0 -480
- package/build/index.js +0 -3
- package/build/info.js +0 -69
- package/build/login.js +0 -161
- package/build/main.js +0 -214
- package/build/users.js +0 -402
- package/build/util.js +0 -157
- package/coverage/clover.xml +0 -66
- package/coverage/coverage-final.json +0 -4
- package/coverage/lcov-report/base.css +0 -212
- package/coverage/lcov-report/cli.ts.html +0 -329
- package/coverage/lcov-report/config.ts.html +0 -152
- package/coverage/lcov-report/index.html +0 -119
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -1
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -158
- package/coverage/lcov-report/util.ts.html +0 -350
- package/coverage/lcov.info +0 -121
- package/package-lock.json +0 -7617
- package/tests/util.test.ts +0 -35
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import { setup, assign, fromPromise } from 'xstate';
|
|
2
|
+
export const wizardMachine = setup({
|
|
3
|
+
types: {
|
|
4
|
+
context: {},
|
|
5
|
+
input: {},
|
|
6
|
+
events: {},
|
|
7
|
+
},
|
|
8
|
+
actions: {
|
|
9
|
+
emitStateEnter: ({ context }, params) => {
|
|
10
|
+
context.emitter.emit('state:enter', { state: params.state });
|
|
11
|
+
},
|
|
12
|
+
emitStateExit: ({ context }, params) => {
|
|
13
|
+
context.emitter.emit('state:exit', { state: params.state });
|
|
14
|
+
},
|
|
15
|
+
emitAuthChecking: ({ context }) => {
|
|
16
|
+
context.emitter.emit('auth:checking', {});
|
|
17
|
+
},
|
|
18
|
+
emitAuthRequired: ({ context }) => {
|
|
19
|
+
context.emitter.emit('auth:required', {});
|
|
20
|
+
},
|
|
21
|
+
emitAuthSuccess: ({ context }) => {
|
|
22
|
+
context.emitter.emit('auth:success', {});
|
|
23
|
+
},
|
|
24
|
+
emitAuthFailure: ({ context }) => {
|
|
25
|
+
const message = context.error?.message ?? 'Authentication failed';
|
|
26
|
+
context.emitter.emit('auth:failure', { message });
|
|
27
|
+
},
|
|
28
|
+
emitDetectionStart: ({ context }) => {
|
|
29
|
+
context.emitter.emit('detection:start', {});
|
|
30
|
+
},
|
|
31
|
+
emitDetectionComplete: ({ context }) => {
|
|
32
|
+
if (context.integration) {
|
|
33
|
+
context.emitter.emit('detection:complete', { integration: context.integration });
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
context.emitter.emit('detection:none', {});
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
emitGitChecking: ({ context }) => {
|
|
40
|
+
context.emitter.emit('git:checking', {});
|
|
41
|
+
},
|
|
42
|
+
emitGitClean: ({ context }) => {
|
|
43
|
+
context.emitter.emit('git:clean', {});
|
|
44
|
+
},
|
|
45
|
+
emitGitDirty: ({ context }) => {
|
|
46
|
+
context.emitter.emit('git:dirty', { files: context.gitDirtyFiles });
|
|
47
|
+
},
|
|
48
|
+
emitGitConfirmed: ({ context }) => {
|
|
49
|
+
context.emitter.emit('git:dirty:confirmed', {});
|
|
50
|
+
},
|
|
51
|
+
emitGitCancelled: ({ context }) => {
|
|
52
|
+
context.emitter.emit('git:dirty:cancelled', {});
|
|
53
|
+
},
|
|
54
|
+
emitCredentialsGathering: ({ context }) => {
|
|
55
|
+
const requiresApiKey = ['nextjs', 'tanstack-start', 'react-router'].includes(context.integration ?? '');
|
|
56
|
+
context.emitter.emit('credentials:gathering', { requiresApiKey });
|
|
57
|
+
context.emitter.emit('credentials:request', { requiresApiKey });
|
|
58
|
+
},
|
|
59
|
+
emitCredentialsFound: ({ context }) => {
|
|
60
|
+
context.emitter.emit('credentials:found', {});
|
|
61
|
+
},
|
|
62
|
+
emitConfigStart: ({ context }) => {
|
|
63
|
+
context.emitter.emit('config:start', {});
|
|
64
|
+
},
|
|
65
|
+
emitConfigComplete: ({ context }) => {
|
|
66
|
+
context.emitter.emit('config:complete', {});
|
|
67
|
+
},
|
|
68
|
+
emitAgentStart: ({ context }) => {
|
|
69
|
+
context.emitter.emit('agent:start', {});
|
|
70
|
+
},
|
|
71
|
+
emitAgentSuccess: ({ context }, params) => {
|
|
72
|
+
context.emitter.emit('agent:success', { summary: params.summary });
|
|
73
|
+
context.emitter.emit('complete', { success: true, summary: params.summary });
|
|
74
|
+
},
|
|
75
|
+
emitAgentFailure: ({ context }) => {
|
|
76
|
+
const message = context.error?.message ?? 'Agent execution failed';
|
|
77
|
+
const stack = context.error?.stack;
|
|
78
|
+
context.emitter.emit('agent:failure', { message, stack });
|
|
79
|
+
context.emitter.emit('complete', { success: false, summary: message });
|
|
80
|
+
},
|
|
81
|
+
assignDetectionResult: assign({
|
|
82
|
+
integration: ({ event }) => {
|
|
83
|
+
const doneEvent = event;
|
|
84
|
+
return doneEvent.output?.integration;
|
|
85
|
+
},
|
|
86
|
+
}),
|
|
87
|
+
assignGitResult: assign({
|
|
88
|
+
gitIsClean: ({ event }) => {
|
|
89
|
+
const doneEvent = event;
|
|
90
|
+
return doneEvent.output?.isClean ?? true;
|
|
91
|
+
},
|
|
92
|
+
gitDirtyFiles: ({ event }) => {
|
|
93
|
+
const doneEvent = event;
|
|
94
|
+
return doneEvent.output?.files ?? [];
|
|
95
|
+
},
|
|
96
|
+
}),
|
|
97
|
+
assignCredentials: assign({
|
|
98
|
+
credentials: ({ event }) => {
|
|
99
|
+
if (event.type === 'CREDENTIALS_SUBMITTED') {
|
|
100
|
+
return { apiKey: event.apiKey, clientId: event.clientId };
|
|
101
|
+
}
|
|
102
|
+
return undefined;
|
|
103
|
+
},
|
|
104
|
+
}),
|
|
105
|
+
assignError: assign({
|
|
106
|
+
error: ({ event }) => {
|
|
107
|
+
if ('error' in event && event.error instanceof Error) {
|
|
108
|
+
return event.error;
|
|
109
|
+
}
|
|
110
|
+
if ('error' in event && typeof event.error === 'object' && event.error !== null) {
|
|
111
|
+
return new Error(String(event.error.message ?? event.error));
|
|
112
|
+
}
|
|
113
|
+
return new Error('Unknown error');
|
|
114
|
+
},
|
|
115
|
+
}),
|
|
116
|
+
emitCancelled: ({ context }) => {
|
|
117
|
+
context.emitter.emit('complete', { success: false, summary: 'Wizard cancelled by user' });
|
|
118
|
+
},
|
|
119
|
+
emitError: ({ context }) => {
|
|
120
|
+
const message = context.error?.message ?? 'An unexpected error occurred';
|
|
121
|
+
context.emitter.emit('error', { message, stack: context.error?.stack });
|
|
122
|
+
context.emitter.emit('complete', { success: false, summary: message });
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
guards: {
|
|
126
|
+
shouldSkipAuth: ({ context }) => context.options.skipAuth === true,
|
|
127
|
+
gitIsClean: ({ context }) => context.gitIsClean === true,
|
|
128
|
+
hasCredentials: ({ context }) => context.options.apiKey !== undefined && context.options.clientId !== undefined,
|
|
129
|
+
hasIntegration: ({ context }) => context.integration !== undefined,
|
|
130
|
+
},
|
|
131
|
+
actors: {
|
|
132
|
+
checkAuthentication: fromPromise(async () => {
|
|
133
|
+
throw new Error('checkAuthentication not implemented - provide via machine.provide()');
|
|
134
|
+
}),
|
|
135
|
+
detectIntegration: fromPromise(async () => {
|
|
136
|
+
throw new Error('detectIntegration not implemented - provide via machine.provide()');
|
|
137
|
+
}),
|
|
138
|
+
checkGitStatus: fromPromise(async () => {
|
|
139
|
+
throw new Error('checkGitStatus not implemented - provide via machine.provide()');
|
|
140
|
+
}),
|
|
141
|
+
configureEnvironment: fromPromise(async () => {
|
|
142
|
+
throw new Error('configureEnvironment not implemented - provide via machine.provide()');
|
|
143
|
+
}),
|
|
144
|
+
runAgent: fromPromise(async () => {
|
|
145
|
+
throw new Error('runAgent not implemented - provide via machine.provide()');
|
|
146
|
+
}),
|
|
147
|
+
},
|
|
148
|
+
}).createMachine({
|
|
149
|
+
id: 'wizard',
|
|
150
|
+
initial: 'idle',
|
|
151
|
+
context: ({ input }) => ({
|
|
152
|
+
emitter: input.emitter,
|
|
153
|
+
options: input.options,
|
|
154
|
+
integration: input.options.integration,
|
|
155
|
+
credentials: input.options.apiKey && input.options.clientId
|
|
156
|
+
? { apiKey: input.options.apiKey, clientId: input.options.clientId }
|
|
157
|
+
: undefined,
|
|
158
|
+
gitIsClean: true,
|
|
159
|
+
gitDirtyFiles: [],
|
|
160
|
+
error: undefined,
|
|
161
|
+
}),
|
|
162
|
+
// Global event handlers - CANCEL can be sent from any state
|
|
163
|
+
on: {
|
|
164
|
+
CANCEL: {
|
|
165
|
+
target: '.cancelled',
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
states: {
|
|
169
|
+
idle: {
|
|
170
|
+
on: {
|
|
171
|
+
START: [
|
|
172
|
+
{
|
|
173
|
+
target: 'preparing',
|
|
174
|
+
guard: 'shouldSkipAuth',
|
|
175
|
+
actions: { type: 'emitStateEnter', params: { state: 'preparing' } },
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
target: 'authenticating',
|
|
179
|
+
actions: { type: 'emitStateEnter', params: { state: 'authenticating' } },
|
|
180
|
+
},
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
authenticating: {
|
|
185
|
+
entry: ['emitAuthChecking'],
|
|
186
|
+
invoke: {
|
|
187
|
+
id: 'checkAuthentication',
|
|
188
|
+
src: 'checkAuthentication',
|
|
189
|
+
input: ({ context }) => ({ options: context.options }),
|
|
190
|
+
onDone: {
|
|
191
|
+
target: 'preparing',
|
|
192
|
+
actions: [
|
|
193
|
+
'emitAuthSuccess',
|
|
194
|
+
{ type: 'emitStateExit', params: { state: 'authenticating' } },
|
|
195
|
+
{ type: 'emitStateEnter', params: { state: 'preparing' } },
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
onError: {
|
|
199
|
+
target: 'error',
|
|
200
|
+
actions: ['assignError', 'emitAuthFailure', { type: 'emitStateExit', params: { state: 'authenticating' } }],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
preparing: {
|
|
205
|
+
type: 'parallel',
|
|
206
|
+
states: {
|
|
207
|
+
detection: {
|
|
208
|
+
initial: 'running',
|
|
209
|
+
states: {
|
|
210
|
+
running: {
|
|
211
|
+
entry: ['emitDetectionStart'],
|
|
212
|
+
invoke: {
|
|
213
|
+
id: 'detectIntegration',
|
|
214
|
+
src: 'detectIntegration',
|
|
215
|
+
input: ({ context }) => ({ options: context.options }),
|
|
216
|
+
onDone: {
|
|
217
|
+
target: 'done',
|
|
218
|
+
actions: ['assignDetectionResult', 'emitDetectionComplete'],
|
|
219
|
+
},
|
|
220
|
+
onError: {
|
|
221
|
+
// Detection failure is non-fatal - user can select manually
|
|
222
|
+
target: 'done',
|
|
223
|
+
actions: ['emitDetectionComplete'],
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
done: {
|
|
228
|
+
type: 'final',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
gitCheck: {
|
|
233
|
+
initial: 'running',
|
|
234
|
+
states: {
|
|
235
|
+
running: {
|
|
236
|
+
entry: ['emitGitChecking'],
|
|
237
|
+
invoke: {
|
|
238
|
+
id: 'checkGitStatus',
|
|
239
|
+
src: 'checkGitStatus',
|
|
240
|
+
input: ({ context }) => ({ installDir: context.options.installDir }),
|
|
241
|
+
onDone: {
|
|
242
|
+
target: 'evaluating',
|
|
243
|
+
actions: ['assignGitResult'],
|
|
244
|
+
},
|
|
245
|
+
onError: {
|
|
246
|
+
// Git check failure is non-fatal - treat as clean
|
|
247
|
+
target: 'done',
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
evaluating: {
|
|
252
|
+
always: [
|
|
253
|
+
{
|
|
254
|
+
target: 'done',
|
|
255
|
+
guard: 'gitIsClean',
|
|
256
|
+
actions: ['emitGitClean'],
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
target: 'awaitingConfirmation',
|
|
260
|
+
actions: ['emitGitDirty'],
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
},
|
|
264
|
+
awaitingConfirmation: {
|
|
265
|
+
on: {
|
|
266
|
+
GIT_CONFIRMED: {
|
|
267
|
+
target: 'done',
|
|
268
|
+
actions: ['emitGitConfirmed'],
|
|
269
|
+
},
|
|
270
|
+
GIT_CANCELLED: {
|
|
271
|
+
target: '#wizard.cancelled',
|
|
272
|
+
actions: ['emitGitCancelled'],
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
done: {
|
|
277
|
+
type: 'final',
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
onDone: [
|
|
283
|
+
{
|
|
284
|
+
target: 'gatheringCredentials',
|
|
285
|
+
guard: 'hasIntegration',
|
|
286
|
+
actions: { type: 'emitStateExit', params: { state: 'preparing' } },
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
target: 'error',
|
|
290
|
+
actions: [
|
|
291
|
+
assign({ error: () => new Error('Could not detect framework integration') }),
|
|
292
|
+
{ type: 'emitStateExit', params: { state: 'preparing' } },
|
|
293
|
+
],
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
},
|
|
297
|
+
gatheringCredentials: {
|
|
298
|
+
entry: [{ type: 'emitStateEnter', params: { state: 'gatheringCredentials' } }],
|
|
299
|
+
initial: 'checking',
|
|
300
|
+
states: {
|
|
301
|
+
checking: {
|
|
302
|
+
always: [
|
|
303
|
+
{
|
|
304
|
+
target: '#wizard.configuring',
|
|
305
|
+
guard: 'hasCredentials',
|
|
306
|
+
actions: ['emitCredentialsFound', { type: 'emitStateExit', params: { state: 'gatheringCredentials' } }],
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
target: 'prompting',
|
|
310
|
+
},
|
|
311
|
+
],
|
|
312
|
+
},
|
|
313
|
+
prompting: {
|
|
314
|
+
entry: ['emitCredentialsGathering'],
|
|
315
|
+
on: {
|
|
316
|
+
CREDENTIALS_SUBMITTED: {
|
|
317
|
+
target: '#wizard.configuring',
|
|
318
|
+
actions: ['assignCredentials', { type: 'emitStateExit', params: { state: 'gatheringCredentials' } }],
|
|
319
|
+
},
|
|
320
|
+
CANCEL: {
|
|
321
|
+
target: '#wizard.cancelled',
|
|
322
|
+
actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
configuring: {
|
|
329
|
+
entry: [{ type: 'emitStateEnter', params: { state: 'configuring' } }, 'emitConfigStart'],
|
|
330
|
+
invoke: {
|
|
331
|
+
id: 'configureEnvironment',
|
|
332
|
+
src: 'configureEnvironment',
|
|
333
|
+
input: ({ context }) => ({ context }),
|
|
334
|
+
onDone: {
|
|
335
|
+
target: 'runningAgent',
|
|
336
|
+
actions: ['emitConfigComplete', { type: 'emitStateExit', params: { state: 'configuring' } }],
|
|
337
|
+
},
|
|
338
|
+
onError: {
|
|
339
|
+
target: 'error',
|
|
340
|
+
actions: ['assignError', { type: 'emitStateExit', params: { state: 'configuring' } }],
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
runningAgent: {
|
|
345
|
+
entry: [{ type: 'emitStateEnter', params: { state: 'runningAgent' } }, 'emitAgentStart'],
|
|
346
|
+
invoke: {
|
|
347
|
+
id: 'runAgent',
|
|
348
|
+
src: 'runAgent',
|
|
349
|
+
input: ({ context }) => ({ context }),
|
|
350
|
+
onDone: {
|
|
351
|
+
target: 'complete',
|
|
352
|
+
actions: [
|
|
353
|
+
({ context, event }) => {
|
|
354
|
+
const output = event.output;
|
|
355
|
+
if (output.success) {
|
|
356
|
+
context.emitter.emit('agent:success', { summary: output.summary });
|
|
357
|
+
context.emitter.emit('complete', { success: true, summary: output.summary });
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
context.emitter.emit('agent:failure', {
|
|
361
|
+
message: output.error?.message ?? 'Agent failed',
|
|
362
|
+
});
|
|
363
|
+
context.emitter.emit('complete', {
|
|
364
|
+
success: false,
|
|
365
|
+
summary: output.error?.message,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
{ type: 'emitStateExit', params: { state: 'runningAgent' } },
|
|
370
|
+
],
|
|
371
|
+
},
|
|
372
|
+
onError: {
|
|
373
|
+
target: 'error',
|
|
374
|
+
actions: ['assignError', 'emitAgentFailure', { type: 'emitStateExit', params: { state: 'runningAgent' } }],
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
complete: {
|
|
379
|
+
type: 'final',
|
|
380
|
+
entry: { type: 'emitStateEnter', params: { state: 'complete' } },
|
|
381
|
+
},
|
|
382
|
+
cancelled: {
|
|
383
|
+
type: 'final',
|
|
384
|
+
entry: [{ type: 'emitStateEnter', params: { state: 'cancelled' } }, 'emitCancelled'],
|
|
385
|
+
},
|
|
386
|
+
error: {
|
|
387
|
+
type: 'final',
|
|
388
|
+
entry: [{ type: 'emitStateEnter', params: { state: 'error' } }, 'emitError'],
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
//# sourceMappingURL=wizard-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-core.js","sourceRoot":"","sources":["../../../src/lib/wizard-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { setup, assign, fromPromise, type ActorRefFrom } from 'xstate';\nimport type {\n WizardMachineContext,\n WizardMachineInput,\n WizardMachineEvent,\n DetectionOutput,\n GitCheckOutput,\n AgentOutput,\n} from './wizard-core.types.js';\nimport type { WizardOptions } from '../utils/types.js';\n\nexport const wizardMachine = setup({\n types: {\n context: {} as WizardMachineContext,\n input: {} as WizardMachineInput,\n events: {} as WizardMachineEvent,\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 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 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, summary: message });\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: 'Wizard 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, summary: message });\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 },\n\n actors: {\n checkAuthentication: fromPromise<boolean, { options: WizardOptions }>(async () => {\n throw new Error('checkAuthentication not implemented - provide via machine.provide()');\n }),\n detectIntegration: fromPromise<DetectionOutput, { options: WizardOptions }>(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: WizardMachineContext }>(async () => {\n throw new Error('configureEnvironment not implemented - provide via machine.provide()');\n }),\n runAgent: fromPromise<AgentOutput, { context: WizardMachineContext }>(async () => {\n throw new Error('runAgent not implemented - provide via machine.provide()');\n }),\n },\n}).createMachine({\n id: 'wizard',\n initial: 'idle',\n\n context: ({ input }) => ({\n emitter: input.emitter,\n options: input.options,\n integration: input.options.integration,\n credentials:\n input.options.apiKey && input.options.clientId\n ? { apiKey: input.options.apiKey, clientId: input.options.clientId }\n : undefined,\n gitIsClean: true,\n gitDirtyFiles: [],\n error: undefined,\n }),\n\n // Global event handlers - CANCEL can be sent from any state\n on: {\n CANCEL: {\n target: '.cancelled',\n },\n },\n\n states: {\n idle: {\n on: {\n START: [\n {\n target: 'preparing',\n guard: 'shouldSkipAuth',\n actions: { type: 'emitStateEnter', params: { state: 'preparing' } },\n },\n {\n target: 'authenticating',\n actions: { type: 'emitStateEnter', params: { state: 'authenticating' } },\n },\n ],\n },\n },\n\n authenticating: {\n entry: ['emitAuthChecking'],\n invoke: {\n id: 'checkAuthentication',\n src: 'checkAuthentication',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'preparing',\n actions: [\n 'emitAuthSuccess',\n { type: 'emitStateExit', params: { state: 'authenticating' } },\n { type: 'emitStateEnter', params: { state: 'preparing' } },\n ],\n },\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAuthFailure', { type: 'emitStateExit', params: { state: 'authenticating' } }],\n },\n },\n },\n\n preparing: {\n type: 'parallel',\n states: {\n detection: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitDetectionStart'],\n invoke: {\n id: 'detectIntegration',\n src: 'detectIntegration',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'done',\n actions: ['assignDetectionResult', 'emitDetectionComplete'],\n },\n onError: {\n // Detection failure is non-fatal - user can select manually\n target: 'done',\n actions: ['emitDetectionComplete'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n gitCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitGitChecking'],\n invoke: {\n id: 'checkGitStatus',\n src: 'checkGitStatus',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: {\n target: 'evaluating',\n actions: ['assignGitResult'],\n },\n onError: {\n // Git check failure is non-fatal - treat as clean\n target: 'done',\n },\n },\n },\n evaluating: {\n always: [\n {\n target: 'done',\n guard: 'gitIsClean',\n actions: ['emitGitClean'],\n },\n {\n target: 'awaitingConfirmation',\n actions: ['emitGitDirty'],\n },\n ],\n },\n awaitingConfirmation: {\n on: {\n GIT_CONFIRMED: {\n target: 'done',\n actions: ['emitGitConfirmed'],\n },\n GIT_CANCELLED: {\n target: '#wizard.cancelled',\n actions: ['emitGitCancelled'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n },\n onDone: [\n {\n target: 'gatheringCredentials',\n guard: 'hasIntegration',\n actions: { type: 'emitStateExit', params: { state: 'preparing' } },\n },\n {\n target: 'error',\n actions: [\n assign({ error: () => new Error('Could not detect framework integration') }),\n { type: 'emitStateExit', params: { state: 'preparing' } },\n ],\n },\n ],\n },\n\n gatheringCredentials: {\n entry: [{ type: 'emitStateEnter', params: { state: 'gatheringCredentials' } }],\n initial: 'checking',\n states: {\n checking: {\n always: [\n {\n target: '#wizard.configuring',\n guard: 'hasCredentials',\n actions: ['emitCredentialsFound', { type: 'emitStateExit', params: { state: 'gatheringCredentials' } }],\n },\n {\n target: 'prompting',\n },\n ],\n },\n prompting: {\n entry: ['emitCredentialsGathering'],\n on: {\n CREDENTIALS_SUBMITTED: {\n target: '#wizard.configuring',\n actions: ['assignCredentials', { type: 'emitStateExit', params: { state: 'gatheringCredentials' } }],\n },\n CANCEL: {\n target: '#wizard.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 target: 'complete',\n actions: [\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n if (output.success) {\n context.emitter.emit('agent:success', { summary: output.summary });\n context.emitter.emit('complete', { success: true, summary: output.summary });\n } else {\n context.emitter.emit('agent:failure', {\n message: output.error?.message ?? 'Agent failed',\n });\n context.emitter.emit('complete', {\n success: false,\n summary: output.error?.message,\n });\n }\n },\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAgentFailure', { type: 'emitStateExit', params: { state: 'runningAgent' } }],\n },\n },\n },\n\n complete: {\n type: 'final',\n entry: { type: 'emitStateEnter', params: { state: 'complete' } },\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 WizardMachine = typeof wizardMachine;\nexport type WizardActor = ActorRefFrom<typeof wizardMachine>;\n"]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { WizardEventEmitter } from './events.js';
|
|
2
|
+
import type { WizardOptions } from '../utils/types.js';
|
|
3
|
+
import type { Integration } from './constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Context passed to the wizard state machine.
|
|
6
|
+
* Contains all data needed throughout the wizard flow.
|
|
7
|
+
*/
|
|
8
|
+
export interface WizardMachineContext {
|
|
9
|
+
/** Event emitter for UI communication */
|
|
10
|
+
emitter: WizardEventEmitter;
|
|
11
|
+
/** CLI options from command line args */
|
|
12
|
+
options: WizardOptions;
|
|
13
|
+
/** Detected or selected framework integration */
|
|
14
|
+
integration: Integration | undefined;
|
|
15
|
+
/** WorkOS credentials gathered from user */
|
|
16
|
+
credentials: {
|
|
17
|
+
apiKey: string;
|
|
18
|
+
clientId: string;
|
|
19
|
+
} | undefined;
|
|
20
|
+
/** Whether git working directory is clean */
|
|
21
|
+
gitIsClean: boolean;
|
|
22
|
+
/** List of dirty git files (if any) */
|
|
23
|
+
gitDirtyFiles: string[];
|
|
24
|
+
/** Error that caused failure (if any) */
|
|
25
|
+
error: Error | undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Input provided when creating the machine actor.
|
|
29
|
+
* These values initialize the context.
|
|
30
|
+
*/
|
|
31
|
+
export interface WizardMachineInput {
|
|
32
|
+
emitter: WizardEventEmitter;
|
|
33
|
+
options: WizardOptions;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* All events the wizard machine can receive.
|
|
37
|
+
*/
|
|
38
|
+
export type WizardMachineEvent = {
|
|
39
|
+
type: 'START';
|
|
40
|
+
} | {
|
|
41
|
+
type: 'SKIP_AUTH';
|
|
42
|
+
} | {
|
|
43
|
+
type: 'GIT_CONFIRMED';
|
|
44
|
+
} | {
|
|
45
|
+
type: 'GIT_CANCELLED';
|
|
46
|
+
} | {
|
|
47
|
+
type: 'CREDENTIALS_SUBMITTED';
|
|
48
|
+
apiKey: string;
|
|
49
|
+
clientId: string;
|
|
50
|
+
} | {
|
|
51
|
+
type: 'CANCEL';
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Output from the detection actor.
|
|
55
|
+
*/
|
|
56
|
+
export interface DetectionOutput {
|
|
57
|
+
integration: Integration | undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Output from the git check actor.
|
|
61
|
+
*/
|
|
62
|
+
export interface GitCheckOutput {
|
|
63
|
+
isClean: boolean;
|
|
64
|
+
files: string[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Output from the agent actor.
|
|
68
|
+
*/
|
|
69
|
+
export interface AgentOutput {
|
|
70
|
+
success: boolean;
|
|
71
|
+
summary?: string;
|
|
72
|
+
error?: Error;
|
|
73
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wizard-core.types.js","sourceRoot":"","sources":["../../../src/lib/wizard-core.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { WizardEventEmitter } from './events.js';\nimport type { WizardOptions } from '../utils/types.js';\nimport type { Integration } from './constants.js';\n\n/**\n * Context passed to the wizard state machine.\n * Contains all data needed throughout the wizard flow.\n */\nexport interface WizardMachineContext {\n /** Event emitter for UI communication */\n emitter: WizardEventEmitter;\n /** CLI options from command line args */\n options: WizardOptions;\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}\n\n/**\n * Input provided when creating the machine actor.\n * These values initialize the context.\n */\nexport interface WizardMachineInput {\n emitter: WizardEventEmitter;\n options: WizardOptions;\n}\n\n/**\n * All events the wizard machine can receive.\n */\nexport type WizardMachineEvent =\n | { type: 'START' }\n | { type: 'SKIP_AUTH' }\n | { type: 'GIT_CONFIRMED' }\n | { type: 'GIT_CANCELLED' }\n | { type: 'CREDENTIALS_SUBMITTED'; apiKey: string; clientId: string }\n | { type: 'CANCEL' };\n\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"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Integration } from './constants.js';
|
|
2
|
+
export interface AutoConfigResult {
|
|
3
|
+
redirectUri: {
|
|
4
|
+
success: boolean;
|
|
5
|
+
alreadyExists: boolean;
|
|
6
|
+
};
|
|
7
|
+
corsOrigin: {
|
|
8
|
+
success: boolean;
|
|
9
|
+
alreadyExists: boolean;
|
|
10
|
+
};
|
|
11
|
+
homepageUrl: {
|
|
12
|
+
success: boolean;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface AutoConfigOptions {
|
|
16
|
+
/** Custom homepage URL (defaults to http://localhost:{port}) */
|
|
17
|
+
homepageUrl?: string;
|
|
18
|
+
/** Custom redirect URI (defaults to framework convention) */
|
|
19
|
+
redirectUri?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Auto-configure WorkOS dashboard settings for local development.
|
|
23
|
+
* Sets redirect URI, CORS origin, and homepage URL via the WorkOS API.
|
|
24
|
+
*
|
|
25
|
+
* @param apiKey - WorkOS API key (sk_xxx)
|
|
26
|
+
* @param integration - Framework integration type
|
|
27
|
+
* @param port - Detected or default dev server port
|
|
28
|
+
* @param options - Optional overrides for homepage URL and redirect URI
|
|
29
|
+
*
|
|
30
|
+
* Non-blocking: failures are logged but don't stop the wizard.
|
|
31
|
+
*/
|
|
32
|
+
export declare function autoConfigureWorkOSEnvironment(apiKey: string, integration: Integration, port: number, options?: AutoConfigOptions): Promise<AutoConfigResult | null>;
|