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,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress tracking for wizard phases.
|
|
3
|
+
* Maps xstate machine states to user-friendly phase names.
|
|
4
|
+
*/
|
|
5
|
+
export interface Phase {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
number: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const PHASES: Phase[];
|
|
11
|
+
export declare class ProgressTracker {
|
|
12
|
+
private currentPhase;
|
|
13
|
+
private completedPhases;
|
|
14
|
+
private readonly totalPhases;
|
|
15
|
+
enterPhase(stateId: string): void;
|
|
16
|
+
exitPhase(stateId: string): void;
|
|
17
|
+
getCurrentPhase(): Phase | null;
|
|
18
|
+
getCurrentIndicator(): string;
|
|
19
|
+
getCompletedSummary(): string[];
|
|
20
|
+
isComplete(): boolean;
|
|
21
|
+
reset(): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress tracking for wizard phases.
|
|
3
|
+
* Maps xstate machine states to user-friendly phase names.
|
|
4
|
+
*/
|
|
5
|
+
export const PHASES = [
|
|
6
|
+
{ id: 'authenticating', name: 'Authentication', number: 1 },
|
|
7
|
+
{ id: 'preparing', name: 'Detection', number: 2 },
|
|
8
|
+
{ id: 'gatheringCredentials', name: 'Credentials', number: 3 },
|
|
9
|
+
{ id: 'configuring', name: 'Configuration', number: 4 },
|
|
10
|
+
{ id: 'runningAgent', name: 'Installation', number: 5 },
|
|
11
|
+
];
|
|
12
|
+
export class ProgressTracker {
|
|
13
|
+
currentPhase = null;
|
|
14
|
+
completedPhases = [];
|
|
15
|
+
totalPhases = PHASES.length;
|
|
16
|
+
enterPhase(stateId) {
|
|
17
|
+
const phase = PHASES.find((p) => p.id === stateId);
|
|
18
|
+
if (phase) {
|
|
19
|
+
this.currentPhase = phase;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exitPhase(stateId) {
|
|
23
|
+
const phase = PHASES.find((p) => p.id === stateId);
|
|
24
|
+
if (phase && !this.completedPhases.some((p) => p.id === phase.id)) {
|
|
25
|
+
this.completedPhases.push(phase);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
getCurrentPhase() {
|
|
29
|
+
return this.currentPhase;
|
|
30
|
+
}
|
|
31
|
+
getCurrentIndicator() {
|
|
32
|
+
if (!this.currentPhase)
|
|
33
|
+
return '';
|
|
34
|
+
return `[${this.currentPhase.number}/${this.totalPhases}] ${this.currentPhase.name}`;
|
|
35
|
+
}
|
|
36
|
+
getCompletedSummary() {
|
|
37
|
+
return this.completedPhases.map((p) => `✓ ${p.name}`);
|
|
38
|
+
}
|
|
39
|
+
isComplete() {
|
|
40
|
+
return this.completedPhases.length === this.totalPhases;
|
|
41
|
+
}
|
|
42
|
+
reset() {
|
|
43
|
+
this.currentPhase = null;
|
|
44
|
+
this.completedPhases = [];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=progress-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../../src/lib/progress-tracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,CAAC,MAAM,MAAM,GAAY;IAC7B,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE;IAC3D,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;IACjD,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;IAC9D,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE;IACvD,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE;CACxD,CAAC;AAEF,MAAM,OAAO,eAAe;IAClB,YAAY,GAAiB,IAAI,CAAC;IAClC,eAAe,GAAY,EAAE,CAAC;IACrB,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAE7C,UAAU,CAAC,OAAe;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAe;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAClC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACvF,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC;IAC1D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;CACF","sourcesContent":["/**\n * Progress tracking for wizard phases.\n * Maps xstate machine states to user-friendly phase names.\n */\n\nexport interface Phase {\n id: string;\n name: string;\n number: number;\n}\n\nexport const PHASES: Phase[] = [\n { id: 'authenticating', name: 'Authentication', number: 1 },\n { id: 'preparing', name: 'Detection', number: 2 },\n { id: 'gatheringCredentials', name: 'Credentials', number: 3 },\n { id: 'configuring', name: 'Configuration', number: 4 },\n { id: 'runningAgent', name: 'Installation', number: 5 },\n];\n\nexport class ProgressTracker {\n private currentPhase: Phase | null = null;\n private completedPhases: Phase[] = [];\n private readonly totalPhases = PHASES.length;\n\n enterPhase(stateId: string): void {\n const phase = PHASES.find((p) => p.id === stateId);\n if (phase) {\n this.currentPhase = phase;\n }\n }\n\n exitPhase(stateId: string): void {\n const phase = PHASES.find((p) => p.id === stateId);\n if (phase && !this.completedPhases.some((p) => p.id === phase.id)) {\n this.completedPhases.push(phase);\n }\n }\n\n getCurrentPhase(): Phase | null {\n return this.currentPhase;\n }\n\n getCurrentIndicator(): string {\n if (!this.currentPhase) return '';\n return `[${this.currentPhase.number}/${this.totalPhases}] ${this.currentPhase.name}`;\n }\n\n getCompletedSummary(): string[] {\n return this.completedPhases.map((p) => `✓ ${p.name}`);\n }\n\n isComplete(): boolean {\n return this.completedPhases.length === this.totalPhases;\n }\n\n reset(): void {\n this.currentPhase = null;\n this.completedPhases = [];\n }\n}\n"]}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { createActor, fromPromise } from 'xstate';
|
|
2
|
+
import { createSkyInspector } from '@statelyai/inspect';
|
|
3
|
+
import open from 'opn';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { wizardMachine } from './wizard-core.js';
|
|
7
|
+
import { createWizardEventEmitter } from './events.js';
|
|
8
|
+
import { CLIAdapter } from './adapters/cli-adapter.js';
|
|
9
|
+
import { DashboardAdapter } from './adapters/dashboard-adapter.js';
|
|
10
|
+
import { Integration } from './constants.js';
|
|
11
|
+
import { parseEnvFile } from '../utils/env-parser.js';
|
|
12
|
+
import { enableDebugLogs, initLogFile, logInfo, logError } from '../utils/debug.js';
|
|
13
|
+
import { getAccessToken, getCredentials } from './credentials.js';
|
|
14
|
+
import { analytics } from '../utils/analytics.js';
|
|
15
|
+
import { getVersion } from './settings.js';
|
|
16
|
+
import { getLlmGatewayUrlFromHost } from '../utils/urls.js';
|
|
17
|
+
import { runLogin } from '../commands/login.js';
|
|
18
|
+
import { isInGitRepo, getUncommittedOrUntrackedFiles } from '../utils/clack-utils.js';
|
|
19
|
+
import { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './config.js';
|
|
20
|
+
import { autoConfigureWorkOSEnvironment } from './workos-management.js';
|
|
21
|
+
import { detectPort, getCallbackPath } from './port-detection.js';
|
|
22
|
+
import { writeEnvLocal } from './env-writer.js';
|
|
23
|
+
import { runNextjsWizardAgent } from '../nextjs/nextjs-wizard-agent.js';
|
|
24
|
+
import { runReactWizardAgent } from '../react/react-wizard-agent.js';
|
|
25
|
+
import { runReactRouterWizardAgent } from '../react-router/react-router-wizard-agent.js';
|
|
26
|
+
import { runTanstackStartWizardAgent } from '../tanstack-start/tanstack-start-wizard-agent.js';
|
|
27
|
+
import { runVanillaJsWizardAgent } from '../vanilla-js/vanilla-js-wizard-agent.js';
|
|
28
|
+
async function runIntegrationWizardFn(integration, options) {
|
|
29
|
+
switch (integration) {
|
|
30
|
+
case Integration.nextjs:
|
|
31
|
+
return runNextjsWizardAgent(options);
|
|
32
|
+
case Integration.react:
|
|
33
|
+
return runReactWizardAgent(options);
|
|
34
|
+
case Integration.reactRouter:
|
|
35
|
+
return runReactRouterWizardAgent(options);
|
|
36
|
+
case Integration.tanstackStart:
|
|
37
|
+
return runTanstackStartWizardAgent(options);
|
|
38
|
+
case Integration.vanillaJs:
|
|
39
|
+
return runVanillaJsWizardAgent(options);
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unknown integration: ${integration}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function readExistingCredentials(installDir) {
|
|
45
|
+
const envPath = join(installDir, '.env.local');
|
|
46
|
+
if (!existsSync(envPath)) {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const content = readFileSync(envPath, 'utf-8');
|
|
51
|
+
const envVars = parseEnvFile(content);
|
|
52
|
+
return {
|
|
53
|
+
apiKey: envVars.WORKOS_API_KEY || undefined,
|
|
54
|
+
clientId: envVars.WORKOS_CLIENT_ID || undefined,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return {};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async function detectIntegrationFn(options) {
|
|
62
|
+
const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(([a], [b]) => INTEGRATION_ORDER.indexOf(a) - INTEGRATION_ORDER.indexOf(b));
|
|
63
|
+
for (const [integration, config] of integrationConfigs) {
|
|
64
|
+
const detected = await config.detect(options);
|
|
65
|
+
if (detected) {
|
|
66
|
+
return integration;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
export async function runWithCore(options) {
|
|
72
|
+
// Initialize debug/logging early so we capture all failures
|
|
73
|
+
initLogFile();
|
|
74
|
+
if (options.debug) {
|
|
75
|
+
enableDebugLogs();
|
|
76
|
+
}
|
|
77
|
+
logInfo('Wizard starting with options:', {
|
|
78
|
+
debug: options.debug,
|
|
79
|
+
dashboard: options.dashboard,
|
|
80
|
+
local: options.local,
|
|
81
|
+
ci: options.ci,
|
|
82
|
+
skipAuth: options.skipAuth,
|
|
83
|
+
installDir: options.installDir,
|
|
84
|
+
});
|
|
85
|
+
// Configure telemetry endpoint (same URL as LLM gateway)
|
|
86
|
+
const gatewayUrl = getLlmGatewayUrlFromHost();
|
|
87
|
+
analytics.setGatewayUrl(gatewayUrl);
|
|
88
|
+
const existingCreds = readExistingCredentials(options.installDir);
|
|
89
|
+
const augmentedOptions = {
|
|
90
|
+
...options,
|
|
91
|
+
apiKey: options.apiKey || existingCreds.apiKey,
|
|
92
|
+
clientId: options.clientId || existingCreds.clientId,
|
|
93
|
+
};
|
|
94
|
+
const emitter = createWizardEventEmitter();
|
|
95
|
+
let actor = null;
|
|
96
|
+
const sendEvent = (event) => {
|
|
97
|
+
if (actor) {
|
|
98
|
+
actor.send(event);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const adapter = options.dashboard
|
|
102
|
+
? new DashboardAdapter({ emitter, sendEvent, debug: augmentedOptions.debug })
|
|
103
|
+
: new CLIAdapter({ emitter, sendEvent, debug: augmentedOptions.debug });
|
|
104
|
+
const machineWithActors = wizardMachine.provide({
|
|
105
|
+
actors: {
|
|
106
|
+
checkAuthentication: fromPromise(async () => {
|
|
107
|
+
const token = getAccessToken();
|
|
108
|
+
if (token) {
|
|
109
|
+
// Set telemetry from existing credentials
|
|
110
|
+
const creds = getCredentials();
|
|
111
|
+
if (creds) {
|
|
112
|
+
analytics.setAccessToken(creds.accessToken);
|
|
113
|
+
analytics.setDistinctId(creds.userId);
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
await runLogin();
|
|
118
|
+
const newToken = getAccessToken();
|
|
119
|
+
if (!newToken) {
|
|
120
|
+
throw new Error('Authentication failed. Please try again.');
|
|
121
|
+
}
|
|
122
|
+
// Set telemetry after fresh login
|
|
123
|
+
const creds = getCredentials();
|
|
124
|
+
if (creds) {
|
|
125
|
+
analytics.setAccessToken(creds.accessToken);
|
|
126
|
+
analytics.setDistinctId(creds.userId);
|
|
127
|
+
}
|
|
128
|
+
return true;
|
|
129
|
+
}),
|
|
130
|
+
detectIntegration: fromPromise(async ({ input }) => {
|
|
131
|
+
const integration = await detectIntegrationFn({ installDir: input.options.installDir });
|
|
132
|
+
return { integration };
|
|
133
|
+
}),
|
|
134
|
+
checkGitStatus: fromPromise(async () => {
|
|
135
|
+
if (!isInGitRepo()) {
|
|
136
|
+
return { isClean: true, files: [] };
|
|
137
|
+
}
|
|
138
|
+
const files = getUncommittedOrUntrackedFiles();
|
|
139
|
+
return { isClean: files.length === 0, files };
|
|
140
|
+
}),
|
|
141
|
+
configureEnvironment: fromPromise(async ({ input }) => {
|
|
142
|
+
const { context } = input;
|
|
143
|
+
const { options: wizardOptions, integration, credentials } = context;
|
|
144
|
+
if (!integration || !credentials) {
|
|
145
|
+
throw new Error('Missing integration or credentials');
|
|
146
|
+
}
|
|
147
|
+
const port = detectPort(integration, wizardOptions.installDir);
|
|
148
|
+
const callbackPath = getCallbackPath(integration);
|
|
149
|
+
const redirectUri = wizardOptions.redirectUri || `http://localhost:${port}${callbackPath}`;
|
|
150
|
+
const requiresApiKey = [Integration.nextjs, Integration.tanstackStart, Integration.reactRouter].includes(integration);
|
|
151
|
+
if (credentials.apiKey && requiresApiKey) {
|
|
152
|
+
await autoConfigureWorkOSEnvironment(credentials.apiKey, integration, port, {
|
|
153
|
+
homepageUrl: wizardOptions.homepageUrl,
|
|
154
|
+
redirectUri: wizardOptions.redirectUri,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const redirectUriKey = integration === Integration.nextjs ? 'NEXT_PUBLIC_WORKOS_REDIRECT_URI' : 'WORKOS_REDIRECT_URI';
|
|
158
|
+
writeEnvLocal(wizardOptions.installDir, {
|
|
159
|
+
...(credentials.apiKey ? { WORKOS_API_KEY: credentials.apiKey } : {}),
|
|
160
|
+
WORKOS_CLIENT_ID: credentials.clientId,
|
|
161
|
+
[redirectUriKey]: redirectUri,
|
|
162
|
+
});
|
|
163
|
+
}),
|
|
164
|
+
runAgent: fromPromise(async ({ input }) => {
|
|
165
|
+
const { context } = input;
|
|
166
|
+
const { options: wizardOptions, integration, credentials } = context;
|
|
167
|
+
if (!integration) {
|
|
168
|
+
return { success: false, error: new Error('No integration specified') };
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const agentOptions = {
|
|
172
|
+
...wizardOptions,
|
|
173
|
+
apiKey: credentials?.apiKey,
|
|
174
|
+
clientId: credentials?.clientId,
|
|
175
|
+
emitter: context.emitter,
|
|
176
|
+
};
|
|
177
|
+
const summary = await runIntegrationWizardFn(integration, agentOptions);
|
|
178
|
+
return {
|
|
179
|
+
success: true,
|
|
180
|
+
summary: summary || `Successfully installed WorkOS AuthKit for ${integration}!`,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return {
|
|
185
|
+
success: false,
|
|
186
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}),
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
let inspector;
|
|
193
|
+
if (augmentedOptions.inspect) {
|
|
194
|
+
const originalLog = console.log;
|
|
195
|
+
let inspectUrl;
|
|
196
|
+
console.log = (...args) => {
|
|
197
|
+
const msg = args.join(' ');
|
|
198
|
+
if (typeof msg === 'string' && msg.startsWith('https://stately.ai/inspect/')) {
|
|
199
|
+
inspectUrl = msg;
|
|
200
|
+
console.log = originalLog;
|
|
201
|
+
console.log(`Opening XState inspector: ${inspectUrl}`);
|
|
202
|
+
void open(inspectUrl);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
originalLog.apply(console, args);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
inspector = createSkyInspector();
|
|
209
|
+
setTimeout(() => {
|
|
210
|
+
console.log = originalLog;
|
|
211
|
+
}, 5000).unref();
|
|
212
|
+
}
|
|
213
|
+
actor = createActor(machineWithActors, {
|
|
214
|
+
input: { emitter, options: augmentedOptions },
|
|
215
|
+
inspect: inspector?.inspect,
|
|
216
|
+
});
|
|
217
|
+
await adapter.start();
|
|
218
|
+
// Start telemetry session
|
|
219
|
+
const mode = augmentedOptions.dashboard ? 'tui' : 'cli';
|
|
220
|
+
analytics.sessionStart(mode, getVersion());
|
|
221
|
+
let wizardStatus = 'success';
|
|
222
|
+
// Handle ctrl+c by sending CANCEL to state machine for graceful shutdown
|
|
223
|
+
const handleSigint = () => {
|
|
224
|
+
wizardStatus = 'cancelled';
|
|
225
|
+
actor?.send({ type: 'CANCEL' });
|
|
226
|
+
};
|
|
227
|
+
process.on('SIGINT', handleSigint);
|
|
228
|
+
try {
|
|
229
|
+
await new Promise((resolve, reject) => {
|
|
230
|
+
actor.subscribe({
|
|
231
|
+
complete: () => {
|
|
232
|
+
const snapshot = actor.getSnapshot();
|
|
233
|
+
if (snapshot.value === 'error') {
|
|
234
|
+
const err = snapshot.context.error;
|
|
235
|
+
wizardStatus = 'error';
|
|
236
|
+
reject(err ?? new Error('Wizard failed'));
|
|
237
|
+
}
|
|
238
|
+
else if (snapshot.value === 'cancelled') {
|
|
239
|
+
wizardStatus = 'cancelled';
|
|
240
|
+
resolve();
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
resolve();
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
error: (err) => {
|
|
247
|
+
wizardStatus = 'error';
|
|
248
|
+
reject(err);
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
actor.start();
|
|
252
|
+
actor.send({ type: 'START' });
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
wizardStatus = 'error';
|
|
257
|
+
logError('Wizard failed with error:', error instanceof Error ? error.stack || error.message : String(error));
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
process.off('SIGINT', handleSigint);
|
|
262
|
+
await analytics.shutdown(wizardStatus);
|
|
263
|
+
await adapter.stop();
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=run-with-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-with-core.js","sourceRoot":"","sources":["../../../src/lib/run-with-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { createActor, fromPromise } from 'xstate';\nimport { createSkyInspector } from '@statelyai/inspect';\nimport open from 'opn';\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport { wizardMachine } from './wizard-core.js';\nimport { createWizardEventEmitter } from './events.js';\nimport { CLIAdapter } from './adapters/cli-adapter.js';\nimport { DashboardAdapter } from './adapters/dashboard-adapter.js';\nimport type { WizardAdapter } from './adapters/types.js';\nimport type { WizardOptions } from '../utils/types.js';\nimport type { WizardMachineContext, DetectionOutput, GitCheckOutput, AgentOutput } from './wizard-core.types.js';\nimport { Integration } from './constants.js';\nimport { parseEnvFile } from '../utils/env-parser.js';\nimport { enableDebugLogs, initLogFile, logInfo, logError } from '../utils/debug.js';\n\nimport { getAccessToken, getCredentials } from './credentials.js';\nimport { analytics } from '../utils/analytics.js';\nimport { getVersion } from './settings.js';\nimport { getLlmGatewayUrlFromHost } from '../utils/urls.js';\nimport { runLogin } from '../commands/login.js';\nimport { isInGitRepo, getUncommittedOrUntrackedFiles } from '../utils/clack-utils.js';\nimport { INTEGRATION_CONFIG, INTEGRATION_ORDER } from './config.js';\nimport { autoConfigureWorkOSEnvironment } from './workos-management.js';\nimport { detectPort, getCallbackPath } from './port-detection.js';\nimport { writeEnvLocal } from './env-writer.js';\nimport { runNextjsWizardAgent } from '../nextjs/nextjs-wizard-agent.js';\nimport { runReactWizardAgent } from '../react/react-wizard-agent.js';\nimport { runReactRouterWizardAgent } from '../react-router/react-router-wizard-agent.js';\nimport { runTanstackStartWizardAgent } from '../tanstack-start/tanstack-start-wizard-agent.js';\nimport { runVanillaJsWizardAgent } from '../vanilla-js/vanilla-js-wizard-agent.js';\n\nasync function runIntegrationWizardFn(integration: Integration, options: WizardOptions): Promise<string> {\n switch (integration) {\n case Integration.nextjs:\n return runNextjsWizardAgent(options);\n case Integration.react:\n return runReactWizardAgent(options);\n case Integration.reactRouter:\n return runReactRouterWizardAgent(options);\n case Integration.tanstackStart:\n return runTanstackStartWizardAgent(options);\n case Integration.vanillaJs:\n return runVanillaJsWizardAgent(options);\n default:\n throw new Error(`Unknown integration: ${integration}`);\n }\n}\n\nfunction readExistingCredentials(installDir: string): { apiKey?: string; clientId?: string } {\n const envPath = join(installDir, '.env.local');\n if (!existsSync(envPath)) {\n return {};\n }\n\n try {\n const content = readFileSync(envPath, 'utf-8');\n const envVars = parseEnvFile(content);\n return {\n apiKey: envVars.WORKOS_API_KEY || undefined,\n clientId: envVars.WORKOS_CLIENT_ID || undefined,\n };\n } catch {\n return {};\n }\n}\n\nasync function detectIntegrationFn(options: Pick<WizardOptions, 'installDir'>): Promise<Integration | undefined> {\n const integrationConfigs = Object.entries(INTEGRATION_CONFIG).sort(\n ([a], [b]) => INTEGRATION_ORDER.indexOf(a as Integration) - INTEGRATION_ORDER.indexOf(b as Integration),\n );\n\n for (const [integration, config] of integrationConfigs) {\n const detected = await config.detect(options);\n if (detected) {\n return integration as Integration;\n }\n }\n return undefined;\n}\n\nexport async function runWithCore(options: WizardOptions): Promise<void> {\n // Initialize debug/logging early so we capture all failures\n initLogFile();\n if (options.debug) {\n enableDebugLogs();\n }\n logInfo('Wizard starting with options:', {\n debug: options.debug,\n dashboard: options.dashboard,\n local: options.local,\n ci: options.ci,\n skipAuth: options.skipAuth,\n installDir: options.installDir,\n });\n\n // Configure telemetry endpoint (same URL as LLM gateway)\n const gatewayUrl = getLlmGatewayUrlFromHost();\n analytics.setGatewayUrl(gatewayUrl);\n\n const existingCreds = readExistingCredentials(options.installDir);\n const augmentedOptions: WizardOptions = {\n ...options,\n apiKey: options.apiKey || existingCreds.apiKey,\n clientId: options.clientId || existingCreds.clientId,\n };\n\n const emitter = createWizardEventEmitter();\n let actor: ReturnType<typeof createActor<typeof wizardMachine>> | null = null;\n\n const sendEvent = (event: { type: string; [key: string]: unknown }) => {\n if (actor) {\n actor.send(event as Parameters<typeof actor.send>[0]);\n }\n };\n\n const adapter: WizardAdapter = options.dashboard\n ? new DashboardAdapter({ emitter, sendEvent, debug: augmentedOptions.debug })\n : new CLIAdapter({ emitter, sendEvent, debug: augmentedOptions.debug });\n\n const machineWithActors = wizardMachine.provide({\n actors: {\n checkAuthentication: fromPromise(async () => {\n const token = getAccessToken();\n if (token) {\n // Set telemetry from existing credentials\n const creds = getCredentials();\n if (creds) {\n analytics.setAccessToken(creds.accessToken);\n analytics.setDistinctId(creds.userId);\n }\n return true;\n }\n\n await runLogin();\n\n const newToken = getAccessToken();\n if (!newToken) {\n throw new Error('Authentication failed. Please try again.');\n }\n\n // Set telemetry after fresh login\n const creds = getCredentials();\n if (creds) {\n analytics.setAccessToken(creds.accessToken);\n analytics.setDistinctId(creds.userId);\n }\n return true;\n }),\n\n detectIntegration: fromPromise<DetectionOutput, { options: WizardOptions }>(async ({ input }) => {\n const integration = await detectIntegrationFn({ installDir: input.options.installDir });\n return { integration };\n }),\n\n checkGitStatus: fromPromise<GitCheckOutput, { installDir: string }>(async () => {\n if (!isInGitRepo()) {\n return { isClean: true, files: [] };\n }\n const files = getUncommittedOrUntrackedFiles();\n return { isClean: files.length === 0, files };\n }),\n\n configureEnvironment: fromPromise<void, { context: WizardMachineContext }>(async ({ input }) => {\n const { context } = input;\n const { options: wizardOptions, integration, credentials } = context;\n\n if (!integration || !credentials) {\n throw new Error('Missing integration or credentials');\n }\n\n const port = detectPort(integration, wizardOptions.installDir);\n const callbackPath = getCallbackPath(integration);\n const redirectUri = wizardOptions.redirectUri || `http://localhost:${port}${callbackPath}`;\n\n const requiresApiKey = [Integration.nextjs, Integration.tanstackStart, Integration.reactRouter].includes(\n integration,\n );\n if (credentials.apiKey && requiresApiKey) {\n await autoConfigureWorkOSEnvironment(credentials.apiKey, integration, port, {\n homepageUrl: wizardOptions.homepageUrl,\n redirectUri: wizardOptions.redirectUri,\n });\n }\n\n const redirectUriKey =\n integration === Integration.nextjs ? 'NEXT_PUBLIC_WORKOS_REDIRECT_URI' : 'WORKOS_REDIRECT_URI';\n\n writeEnvLocal(wizardOptions.installDir, {\n ...(credentials.apiKey ? { WORKOS_API_KEY: credentials.apiKey } : {}),\n WORKOS_CLIENT_ID: credentials.clientId,\n [redirectUriKey]: redirectUri,\n });\n }),\n\n runAgent: fromPromise<AgentOutput, { context: WizardMachineContext }>(async ({ input }) => {\n const { context } = input;\n const { options: wizardOptions, integration, credentials } = context;\n\n if (!integration) {\n return { success: false, error: new Error('No integration specified') };\n }\n\n try {\n const agentOptions: WizardOptions = {\n ...wizardOptions,\n apiKey: credentials?.apiKey,\n clientId: credentials?.clientId,\n emitter: context.emitter,\n };\n const summary = await runIntegrationWizardFn(integration, agentOptions);\n return {\n success: true,\n summary: summary || `Successfully installed WorkOS AuthKit for ${integration}!`,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }),\n },\n });\n\n let inspector: ReturnType<typeof createSkyInspector> | undefined;\n if (augmentedOptions.inspect) {\n const originalLog = console.log;\n let inspectUrl: string | undefined;\n\n console.log = (...args: unknown[]) => {\n const msg = args.join(' ');\n if (typeof msg === 'string' && msg.startsWith('https://stately.ai/inspect/')) {\n inspectUrl = msg;\n console.log = originalLog;\n console.log(`Opening XState inspector: ${inspectUrl}`);\n void open(inspectUrl);\n } else {\n originalLog.apply(console, args);\n }\n };\n\n inspector = createSkyInspector();\n setTimeout(() => {\n console.log = originalLog;\n }, 5000).unref();\n }\n\n actor = createActor(machineWithActors, {\n input: { emitter, options: augmentedOptions },\n inspect: inspector?.inspect,\n });\n\n await adapter.start();\n\n // Start telemetry session\n const mode = augmentedOptions.dashboard ? 'tui' : 'cli';\n analytics.sessionStart(mode, getVersion());\n\n let wizardStatus: 'success' | 'error' | 'cancelled' = 'success';\n\n // Handle ctrl+c by sending CANCEL to state machine for graceful shutdown\n const handleSigint = () => {\n wizardStatus = 'cancelled';\n actor?.send({ type: 'CANCEL' });\n };\n process.on('SIGINT', handleSigint);\n\n try {\n await new Promise<void>((resolve, reject) => {\n actor!.subscribe({\n complete: () => {\n const snapshot = actor!.getSnapshot();\n if (snapshot.value === 'error') {\n const err = snapshot.context.error;\n wizardStatus = 'error';\n reject(err ?? new Error('Wizard failed'));\n } else if (snapshot.value === 'cancelled') {\n wizardStatus = 'cancelled';\n resolve();\n } else {\n resolve();\n }\n },\n error: (err) => {\n wizardStatus = 'error';\n reject(err);\n },\n });\n\n actor!.start();\n actor!.send({ type: 'START' });\n });\n } catch (error) {\n wizardStatus = 'error';\n logError('Wizard failed with error:', error instanceof Error ? error.stack || error.message : String(error));\n throw error;\n } finally {\n process.off('SIGINT', handleSigint);\n await analytics.shutdown(wizardStatus);\n await adapter.stop();\n }\n}\n"]}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
export const LINTING_TOOLS = [
|
|
2
|
+
// All (general purpose)
|
|
3
|
+
'codespell',
|
|
4
|
+
'cspell',
|
|
5
|
+
'git-diff-check',
|
|
6
|
+
'gitleaks',
|
|
7
|
+
'trufflehog',
|
|
8
|
+
// Amazon States Language
|
|
9
|
+
'asl-validator',
|
|
10
|
+
// Ansible
|
|
11
|
+
'ansible-lint',
|
|
12
|
+
// Apex, Java
|
|
13
|
+
'pmd',
|
|
14
|
+
// Astro, CSS, GraphQL, GritQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Svelte, TypeScript, Vue
|
|
15
|
+
'biome',
|
|
16
|
+
// AWS CloudFormation templates
|
|
17
|
+
'cfn-lint',
|
|
18
|
+
'cfnlint',
|
|
19
|
+
// AWS CloudFormation, Azure ARM, Dockerfile, Helm, Kubernetes, Security, Terraform
|
|
20
|
+
'checkov',
|
|
21
|
+
// AWS CloudFormation, Azure ARM, Dockerfile, Kubernetes, Secrets, Security, Terraform, Vulnerabilities
|
|
22
|
+
'trivy',
|
|
23
|
+
// Azure Resource Manager (ARM)
|
|
24
|
+
'test-aztemplate',
|
|
25
|
+
// Bash / Shell
|
|
26
|
+
'shellcheck',
|
|
27
|
+
'shfmt',
|
|
28
|
+
// Bazel, Starlark
|
|
29
|
+
'buildifier',
|
|
30
|
+
// C, C++
|
|
31
|
+
'cpplint',
|
|
32
|
+
'clang-format',
|
|
33
|
+
'clang-tidy',
|
|
34
|
+
'cmake-format',
|
|
35
|
+
'iwyu',
|
|
36
|
+
'pragma-once',
|
|
37
|
+
// C#, Dotnet (.NET)
|
|
38
|
+
'dotnet-format',
|
|
39
|
+
// CircleCI Config
|
|
40
|
+
'circleci',
|
|
41
|
+
// Clojure
|
|
42
|
+
'clj-kondo',
|
|
43
|
+
// CoffeeScript
|
|
44
|
+
'coffeelint',
|
|
45
|
+
// Commit messages
|
|
46
|
+
'commitlint',
|
|
47
|
+
// Copy/paste detection
|
|
48
|
+
'jscpd',
|
|
49
|
+
// CSS, SCSS, Sass
|
|
50
|
+
'stylelint',
|
|
51
|
+
// CSS, GraphQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Markdown, TypeScript, Vue, YAML
|
|
52
|
+
'prettier',
|
|
53
|
+
// Cue
|
|
54
|
+
'cue-fmt',
|
|
55
|
+
// Dart
|
|
56
|
+
'dart',
|
|
57
|
+
// Dockerfile / Docker
|
|
58
|
+
'hadolint',
|
|
59
|
+
// Dotenv
|
|
60
|
+
'dotenv-linter',
|
|
61
|
+
// EditorConfig
|
|
62
|
+
'editorconfig-checker',
|
|
63
|
+
// GitHub Actions
|
|
64
|
+
'actionlint',
|
|
65
|
+
'zizmor',
|
|
66
|
+
// Go
|
|
67
|
+
'gofmt',
|
|
68
|
+
'gofumpt',
|
|
69
|
+
'goimports',
|
|
70
|
+
'gokart',
|
|
71
|
+
'golangci-lint',
|
|
72
|
+
'golines',
|
|
73
|
+
// Go, Java, JavaScript, JSON, Python, Ruby, TypeScript, YAML
|
|
74
|
+
'semgrep',
|
|
75
|
+
// GoReleaser
|
|
76
|
+
'goreleaser',
|
|
77
|
+
// GraphQL
|
|
78
|
+
'graphql-schema-linter',
|
|
79
|
+
// Groovy
|
|
80
|
+
'npm-groovy-lint',
|
|
81
|
+
// HAML
|
|
82
|
+
'haml-lint',
|
|
83
|
+
// HTML
|
|
84
|
+
'htmlhint',
|
|
85
|
+
// HTML Templates
|
|
86
|
+
'djlint',
|
|
87
|
+
// Java
|
|
88
|
+
'checkstyle',
|
|
89
|
+
'google-java-format',
|
|
90
|
+
// JavaScript, JSON, TypeScript
|
|
91
|
+
'eslint',
|
|
92
|
+
// Next.js
|
|
93
|
+
'next lint',
|
|
94
|
+
// JavaScript, JSON, Markdown, TypeScript
|
|
95
|
+
'deno',
|
|
96
|
+
// JavaScript, TypeScript
|
|
97
|
+
'rome',
|
|
98
|
+
// JSON, JSONC, JSON5
|
|
99
|
+
'eslint-plugin-jsonc',
|
|
100
|
+
'eslint-plugin-json',
|
|
101
|
+
// JSX, TSX
|
|
102
|
+
'eslint-plugin-jsx-a11y',
|
|
103
|
+
'eslint-plugin-react',
|
|
104
|
+
// Jupyter Notebook
|
|
105
|
+
'nbqa',
|
|
106
|
+
// Kotlin
|
|
107
|
+
'detekt',
|
|
108
|
+
'ktlint',
|
|
109
|
+
// Kubernetes
|
|
110
|
+
'kubeconform',
|
|
111
|
+
'kube-linter',
|
|
112
|
+
// LaTeX
|
|
113
|
+
'chktex',
|
|
114
|
+
// Lua
|
|
115
|
+
'luacheck',
|
|
116
|
+
'stylua',
|
|
117
|
+
// Markdown
|
|
118
|
+
'markdownlint',
|
|
119
|
+
'markdownlint-cli2',
|
|
120
|
+
'markdown-link-check',
|
|
121
|
+
'markdown-table-prettify',
|
|
122
|
+
'remark-lint',
|
|
123
|
+
// Natural language / Prose
|
|
124
|
+
'textlint',
|
|
125
|
+
'vale',
|
|
126
|
+
// Nix
|
|
127
|
+
'nixpkgs-fmt',
|
|
128
|
+
// OpenAPI
|
|
129
|
+
'spectral',
|
|
130
|
+
// package.json
|
|
131
|
+
'sort-package-json',
|
|
132
|
+
// Perl
|
|
133
|
+
'perlcritic',
|
|
134
|
+
'perltidy',
|
|
135
|
+
// PHP
|
|
136
|
+
'php-cs-fixer',
|
|
137
|
+
'phpcs',
|
|
138
|
+
'phpstan',
|
|
139
|
+
'psalm',
|
|
140
|
+
// PNG
|
|
141
|
+
'oxipng',
|
|
142
|
+
// PowerShell
|
|
143
|
+
'psscriptanalyzer',
|
|
144
|
+
// Prisma
|
|
145
|
+
'prisma',
|
|
146
|
+
// Protocol Buffers (Protobuf)
|
|
147
|
+
'protolint',
|
|
148
|
+
'buf',
|
|
149
|
+
// Python
|
|
150
|
+
'pylint',
|
|
151
|
+
'flake8',
|
|
152
|
+
'isort',
|
|
153
|
+
'ruff',
|
|
154
|
+
'black',
|
|
155
|
+
'autopep8',
|
|
156
|
+
'bandit',
|
|
157
|
+
'mypy',
|
|
158
|
+
'pyright',
|
|
159
|
+
'sourcery',
|
|
160
|
+
'yapf',
|
|
161
|
+
// R
|
|
162
|
+
'lintr',
|
|
163
|
+
// Rego
|
|
164
|
+
'opa',
|
|
165
|
+
'regal',
|
|
166
|
+
// Ruby
|
|
167
|
+
'rubocop',
|
|
168
|
+
'brakeman',
|
|
169
|
+
'rufo',
|
|
170
|
+
'standardrb',
|
|
171
|
+
// Rust
|
|
172
|
+
'clippy',
|
|
173
|
+
'rustfmt',
|
|
174
|
+
// Scala
|
|
175
|
+
'scalafmt',
|
|
176
|
+
// Security, Vulnerabilities
|
|
177
|
+
'osv-scanner',
|
|
178
|
+
// Security, Terraform
|
|
179
|
+
'terrascan',
|
|
180
|
+
'tfsec',
|
|
181
|
+
// Snakemake
|
|
182
|
+
'snakemake --lint',
|
|
183
|
+
'snakefmt',
|
|
184
|
+
// SQL
|
|
185
|
+
'sqlfluff',
|
|
186
|
+
'sql-formatter',
|
|
187
|
+
'sqlfmt',
|
|
188
|
+
'squawk',
|
|
189
|
+
// SVG
|
|
190
|
+
'svgo',
|
|
191
|
+
// Swift
|
|
192
|
+
'stringslint',
|
|
193
|
+
'swiftformat',
|
|
194
|
+
'swiftlint',
|
|
195
|
+
// Terraform
|
|
196
|
+
'tflint',
|
|
197
|
+
'terraform',
|
|
198
|
+
'tofu',
|
|
199
|
+
// Terragrunt
|
|
200
|
+
'terragrunt',
|
|
201
|
+
// Textproto
|
|
202
|
+
'txtpbfmt',
|
|
203
|
+
// TOML
|
|
204
|
+
'taplo',
|
|
205
|
+
// Vue
|
|
206
|
+
'eslint-plugin-vue',
|
|
207
|
+
// XML
|
|
208
|
+
'xmllint',
|
|
209
|
+
// YAML
|
|
210
|
+
'yamllint',
|
|
211
|
+
];
|
|
212
|
+
//# sourceMappingURL=safe-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-tools.js","sourceRoot":"","sources":["../../../src/lib/safe-tools.ts"],"names":[],"mappings":"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","sourcesContent":["export const LINTING_TOOLS: string[] = [\n // All (general purpose)\n 'codespell',\n 'cspell',\n 'git-diff-check',\n 'gitleaks',\n 'trufflehog',\n\n // Amazon States Language\n 'asl-validator',\n\n // Ansible\n 'ansible-lint',\n\n // Apex, Java\n 'pmd',\n\n // Astro, CSS, GraphQL, GritQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Svelte, TypeScript, Vue\n 'biome',\n\n // AWS CloudFormation templates\n 'cfn-lint',\n 'cfnlint',\n\n // AWS CloudFormation, Azure ARM, Dockerfile, Helm, Kubernetes, Security, Terraform\n 'checkov',\n\n // AWS CloudFormation, Azure ARM, Dockerfile, Kubernetes, Secrets, Security, Terraform, Vulnerabilities\n 'trivy',\n\n // Azure Resource Manager (ARM)\n 'test-aztemplate',\n\n // Bash / Shell\n 'shellcheck',\n 'shfmt',\n\n // Bazel, Starlark\n 'buildifier',\n\n // C, C++\n 'cpplint',\n 'clang-format',\n 'clang-tidy',\n 'cmake-format',\n 'iwyu',\n 'pragma-once',\n\n // C#, Dotnet (.NET)\n 'dotnet-format',\n\n // CircleCI Config\n 'circleci',\n\n // Clojure\n 'clj-kondo',\n\n // CoffeeScript\n 'coffeelint',\n\n // Commit messages\n 'commitlint',\n\n // Copy/paste detection\n 'jscpd',\n\n // CSS, SCSS, Sass\n 'stylelint',\n\n // CSS, GraphQL, HTML, JavaScript, JSON, JSONC, JSON5, JSX, TSX, Markdown, TypeScript, Vue, YAML\n 'prettier',\n\n // Cue\n 'cue-fmt',\n\n // Dart\n 'dart',\n\n // Dockerfile / Docker\n 'hadolint',\n\n // Dotenv\n 'dotenv-linter',\n\n // EditorConfig\n 'editorconfig-checker',\n\n // GitHub Actions\n 'actionlint',\n 'zizmor',\n\n // Go\n 'gofmt',\n 'gofumpt',\n 'goimports',\n 'gokart',\n 'golangci-lint',\n 'golines',\n\n // Go, Java, JavaScript, JSON, Python, Ruby, TypeScript, YAML\n 'semgrep',\n\n // GoReleaser\n 'goreleaser',\n\n // GraphQL\n 'graphql-schema-linter',\n\n // Groovy\n 'npm-groovy-lint',\n\n // HAML\n 'haml-lint',\n\n // HTML\n 'htmlhint',\n\n // HTML Templates\n 'djlint',\n\n // Java\n 'checkstyle',\n 'google-java-format',\n\n // JavaScript, JSON, TypeScript\n 'eslint',\n\n // Next.js\n 'next lint',\n\n // JavaScript, JSON, Markdown, TypeScript\n 'deno',\n\n // JavaScript, TypeScript\n 'rome',\n\n // JSON, JSONC, JSON5\n 'eslint-plugin-jsonc',\n 'eslint-plugin-json',\n\n // JSX, TSX\n 'eslint-plugin-jsx-a11y',\n 'eslint-plugin-react',\n\n // Jupyter Notebook\n 'nbqa',\n\n // Kotlin\n 'detekt',\n 'ktlint',\n\n // Kubernetes\n 'kubeconform',\n 'kube-linter',\n\n // LaTeX\n 'chktex',\n\n // Lua\n 'luacheck',\n 'stylua',\n\n // Markdown\n 'markdownlint',\n 'markdownlint-cli2',\n 'markdown-link-check',\n 'markdown-table-prettify',\n 'remark-lint',\n\n // Natural language / Prose\n 'textlint',\n 'vale',\n\n // Nix\n 'nixpkgs-fmt',\n\n // OpenAPI\n 'spectral',\n\n // package.json\n 'sort-package-json',\n\n // Perl\n 'perlcritic',\n 'perltidy',\n\n // PHP\n 'php-cs-fixer',\n 'phpcs',\n 'phpstan',\n 'psalm',\n\n // PNG\n 'oxipng',\n\n // PowerShell\n 'psscriptanalyzer',\n\n // Prisma\n 'prisma',\n\n // Protocol Buffers (Protobuf)\n 'protolint',\n 'buf',\n\n // Python\n 'pylint',\n 'flake8',\n 'isort',\n 'ruff',\n 'black',\n 'autopep8',\n 'bandit',\n 'mypy',\n 'pyright',\n 'sourcery',\n 'yapf',\n\n // R\n 'lintr',\n\n // Rego\n 'opa',\n 'regal',\n\n // Ruby\n 'rubocop',\n 'brakeman',\n 'rufo',\n 'standardrb',\n\n // Rust\n 'clippy',\n 'rustfmt',\n\n // Scala\n 'scalafmt',\n\n // Security, Vulnerabilities\n 'osv-scanner',\n\n // Security, Terraform\n 'terrascan',\n 'tfsec',\n\n // Snakemake\n 'snakemake --lint',\n 'snakefmt',\n\n // SQL\n 'sqlfluff',\n 'sql-formatter',\n 'sqlfmt',\n 'squawk',\n\n // SVG\n 'svgo',\n\n // Swift\n 'stringslint',\n 'swiftformat',\n 'swiftlint',\n\n // Terraform\n 'tflint',\n 'terraform',\n 'tofu',\n\n // Terragrunt\n 'terragrunt',\n\n // Textproto\n 'txtpbfmt',\n\n // TOML\n 'taplo',\n\n // Vue\n 'eslint-plugin-vue',\n\n // XML\n 'xmllint',\n\n // YAML\n 'yamllint',\n] as const;\n\nexport type LintingTool = (typeof LINTING_TOOLS)[number];\n"]}
|