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.
Files changed (305) hide show
  1. package/.claude-plugin/plugin.json +13 -0
  2. package/LICENSE +47 -0
  3. package/README.md +154 -1
  4. package/dist/bin.d.ts +2 -0
  5. package/dist/bin.js +163 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli.config.d.ts +52 -0
  8. package/dist/cli.config.js +70 -0
  9. package/dist/cli.config.js.map +1 -0
  10. package/dist/package.json +87 -0
  11. package/dist/src/commands/install-skill.d.ts +20 -0
  12. package/dist/src/commands/install-skill.js +130 -0
  13. package/dist/src/commands/install-skill.js.map +1 -0
  14. package/dist/src/commands/install.d.ts +22 -0
  15. package/dist/src/commands/install.js +57 -0
  16. package/dist/src/commands/install.js.map +1 -0
  17. package/dist/src/commands/login.d.ts +1 -0
  18. package/dist/src/commands/login.js +141 -0
  19. package/dist/src/commands/login.js.map +1 -0
  20. package/dist/src/commands/logout.d.ts +1 -0
  21. package/dist/src/commands/logout.js +17 -0
  22. package/dist/src/commands/logout.js.map +1 -0
  23. package/dist/src/dashboard/components/AnimatedLogo.d.ts +8 -0
  24. package/dist/src/dashboard/components/AnimatedLogo.js +16 -0
  25. package/dist/src/dashboard/components/AnimatedLogo.js.map +1 -0
  26. package/dist/src/dashboard/components/CompletionView.d.ts +13 -0
  27. package/dist/src/dashboard/components/CompletionView.js +21 -0
  28. package/dist/src/dashboard/components/CompletionView.js.map +1 -0
  29. package/dist/src/dashboard/components/ConfirmPrompt.d.ts +9 -0
  30. package/dist/src/dashboard/components/ConfirmPrompt.js +25 -0
  31. package/dist/src/dashboard/components/ConfirmPrompt.js.map +1 -0
  32. package/dist/src/dashboard/components/CredentialsForm.d.ts +10 -0
  33. package/dist/src/dashboard/components/CredentialsForm.js +47 -0
  34. package/dist/src/dashboard/components/CredentialsForm.js.map +1 -0
  35. package/dist/src/dashboard/components/Dashboard.d.ts +3 -0
  36. package/dist/src/dashboard/components/Dashboard.js +100 -0
  37. package/dist/src/dashboard/components/Dashboard.js.map +1 -0
  38. package/dist/src/dashboard/components/DashboardLayout.d.ts +24 -0
  39. package/dist/src/dashboard/components/DashboardLayout.js +25 -0
  40. package/dist/src/dashboard/components/DashboardLayout.js.map +1 -0
  41. package/dist/src/dashboard/components/DiffPanel.d.ts +9 -0
  42. package/dist/src/dashboard/components/DiffPanel.js +136 -0
  43. package/dist/src/dashboard/components/DiffPanel.js.map +1 -0
  44. package/dist/src/dashboard/components/InlinePrompt.d.ts +8 -0
  45. package/dist/src/dashboard/components/InlinePrompt.js +19 -0
  46. package/dist/src/dashboard/components/InlinePrompt.js.map +1 -0
  47. package/dist/src/dashboard/components/OutputPanel.d.ts +10 -0
  48. package/dist/src/dashboard/components/OutputPanel.js +100 -0
  49. package/dist/src/dashboard/components/OutputPanel.js.map +1 -0
  50. package/dist/src/dashboard/components/Panel.d.ts +12 -0
  51. package/dist/src/dashboard/components/Panel.js +6 -0
  52. package/dist/src/dashboard/components/Panel.js.map +1 -0
  53. package/dist/src/dashboard/components/TextInput.d.ts +13 -0
  54. package/dist/src/dashboard/components/TextInput.js +57 -0
  55. package/dist/src/dashboard/components/TextInput.js.map +1 -0
  56. package/dist/src/dashboard/components/WelcomeArt.d.ts +2 -0
  57. package/dist/src/dashboard/components/WelcomeArt.js +9 -0
  58. package/dist/src/dashboard/components/WelcomeArt.js.map +1 -0
  59. package/dist/src/dashboard/hooks/useAnimation.d.ts +7 -0
  60. package/dist/src/dashboard/hooks/useAnimation.js +24 -0
  61. package/dist/src/dashboard/hooks/useAnimation.js.map +1 -0
  62. package/dist/src/dashboard/hooks/useKeyboard.d.ts +8 -0
  63. package/dist/src/dashboard/hooks/useKeyboard.js +18 -0
  64. package/dist/src/dashboard/hooks/useKeyboard.js.map +1 -0
  65. package/dist/src/dashboard/hooks/useTerminalSize.d.ts +8 -0
  66. package/dist/src/dashboard/hooks/useTerminalSize.js +23 -0
  67. package/dist/src/dashboard/hooks/useTerminalSize.js.map +1 -0
  68. package/dist/src/dashboard/index.d.ts +6 -0
  69. package/dist/src/dashboard/index.js +36 -0
  70. package/dist/src/dashboard/index.js.map +1 -0
  71. package/dist/src/dashboard/lib/diff-utils.d.ts +21 -0
  72. package/dist/src/dashboard/lib/diff-utils.js +271 -0
  73. package/dist/src/dashboard/lib/diff-utils.js.map +1 -0
  74. package/dist/src/dashboard/lib/logo-frames.d.ts +20 -0
  75. package/dist/src/dashboard/lib/logo-frames.js +109 -0
  76. package/dist/src/dashboard/lib/logo-frames.js.map +1 -0
  77. package/dist/src/dashboard/lib/welcome-art.d.ts +1 -0
  78. package/dist/src/dashboard/lib/welcome-art.js +5 -0
  79. package/dist/src/dashboard/lib/welcome-art.js.map +1 -0
  80. package/dist/src/dashboard/types.d.ts +5 -0
  81. package/dist/src/dashboard/types.js +2 -0
  82. package/dist/src/dashboard/types.js.map +1 -0
  83. package/dist/src/lib/__tests__/test-utils.d.ts +40 -0
  84. package/dist/src/lib/__tests__/test-utils.js +108 -0
  85. package/dist/src/lib/__tests__/test-utils.js.map +1 -0
  86. package/dist/src/lib/adapters/cli-adapter.d.ts +56 -0
  87. package/dist/src/lib/adapters/cli-adapter.js +318 -0
  88. package/dist/src/lib/adapters/cli-adapter.js.map +1 -0
  89. package/dist/src/lib/adapters/dashboard-adapter.d.ts +30 -0
  90. package/dist/src/lib/adapters/dashboard-adapter.js +97 -0
  91. package/dist/src/lib/adapters/dashboard-adapter.js.map +1 -0
  92. package/dist/src/lib/adapters/index.d.ts +3 -0
  93. package/dist/src/lib/adapters/index.js +3 -0
  94. package/dist/src/lib/adapters/index.js.map +1 -0
  95. package/dist/src/lib/adapters/types.d.ts +41 -0
  96. package/dist/src/lib/adapters/types.js +2 -0
  97. package/dist/src/lib/adapters/types.js.map +1 -0
  98. package/dist/src/lib/agent-interface.d.ts +75 -0
  99. package/dist/src/lib/agent-interface.js +563 -0
  100. package/dist/src/lib/agent-interface.js.map +1 -0
  101. package/dist/src/lib/agent-runner.d.ts +9 -0
  102. package/dist/src/lib/agent-runner.js +213 -0
  103. package/dist/src/lib/agent-runner.js.map +1 -0
  104. package/dist/src/lib/api.d.ts +25 -0
  105. package/dist/src/lib/api.js +120 -0
  106. package/dist/src/lib/api.js.map +1 -0
  107. package/dist/src/lib/config.d.ts +60 -0
  108. package/dist/src/lib/config.js +88 -0
  109. package/dist/src/lib/config.js.map +1 -0
  110. package/dist/src/lib/constants.d.ts +32 -0
  111. package/dist/src/lib/constants.js +53 -0
  112. package/dist/src/lib/constants.js.map +1 -0
  113. package/dist/src/lib/credentials.d.ts +19 -0
  114. package/dist/src/lib/credentials.js +55 -0
  115. package/dist/src/lib/credentials.js.map +1 -0
  116. package/dist/src/lib/env-writer.d.ts +14 -0
  117. package/dist/src/lib/env-writer.js +39 -0
  118. package/dist/src/lib/env-writer.js.map +1 -0
  119. package/dist/src/lib/events.d.ts +114 -0
  120. package/dist/src/lib/events.js +19 -0
  121. package/dist/src/lib/events.js.map +1 -0
  122. package/dist/src/lib/framework-config.d.ts +108 -0
  123. package/dist/src/lib/framework-config.js +11 -0
  124. package/dist/src/lib/framework-config.js.map +1 -0
  125. package/dist/src/lib/helper-functions.d.ts +1 -0
  126. package/dist/src/lib/helper-functions.js +2 -0
  127. package/dist/src/lib/helper-functions.js.map +1 -0
  128. package/dist/src/lib/port-detection.d.ts +7 -0
  129. package/dist/src/lib/port-detection.js +112 -0
  130. package/dist/src/lib/port-detection.js.map +1 -0
  131. package/dist/src/lib/progress-tracker.d.ts +22 -0
  132. package/dist/src/lib/progress-tracker.js +47 -0
  133. package/dist/src/lib/progress-tracker.js.map +1 -0
  134. package/dist/src/lib/run-with-core.d.ts +2 -0
  135. package/dist/src/lib/run-with-core.js +266 -0
  136. package/dist/src/lib/run-with-core.js.map +1 -0
  137. package/dist/src/lib/safe-tools.d.ts +2 -0
  138. package/dist/src/lib/safe-tools.js +212 -0
  139. package/dist/src/lib/safe-tools.js.map +1 -0
  140. package/dist/src/lib/settings.d.ts +59 -0
  141. package/dist/src/lib/settings.js +36 -0
  142. package/dist/src/lib/settings.js.map +1 -0
  143. package/dist/src/lib/token-refresh.d.ts +12 -0
  144. package/dist/src/lib/token-refresh.js +26 -0
  145. package/dist/src/lib/token-refresh.js.map +1 -0
  146. package/dist/src/lib/validation/build-validator.d.ts +9 -0
  147. package/dist/src/lib/validation/build-validator.js +118 -0
  148. package/dist/src/lib/validation/build-validator.js.map +1 -0
  149. package/dist/src/lib/validation/index.d.ts +3 -0
  150. package/dist/src/lib/validation/index.js +3 -0
  151. package/dist/src/lib/validation/index.js.map +1 -0
  152. package/dist/src/lib/validation/types.d.ts +41 -0
  153. package/dist/src/lib/validation/types.js +2 -0
  154. package/dist/src/lib/validation/types.js.map +1 -0
  155. package/dist/src/lib/validation/validator.d.ts +6 -0
  156. package/dist/src/lib/validation/validator.js +647 -0
  157. package/dist/src/lib/validation/validator.js.map +1 -0
  158. package/dist/src/lib/wizard-core.d.ts +200 -0
  159. package/dist/src/lib/wizard-core.js +392 -0
  160. package/dist/src/lib/wizard-core.js.map +1 -0
  161. package/dist/src/lib/wizard-core.types.d.ts +73 -0
  162. package/dist/src/lib/wizard-core.types.js +2 -0
  163. package/dist/src/lib/wizard-core.types.js.map +1 -0
  164. package/dist/src/lib/workos-management.d.ts +32 -0
  165. package/dist/src/lib/workos-management.js +142 -0
  166. package/dist/src/lib/workos-management.js.map +1 -0
  167. package/dist/src/nextjs/nextjs-wizard-agent.d.ts +6 -0
  168. package/dist/src/nextjs/nextjs-wizard-agent.js +97 -0
  169. package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -0
  170. package/dist/src/nextjs/utils.d.ts +8 -0
  171. package/dist/src/nextjs/utils.js +53 -0
  172. package/dist/src/nextjs/utils.js.map +1 -0
  173. package/dist/src/react/react-wizard-agent.d.ts +2 -0
  174. package/dist/src/react/react-wizard-agent.js +47 -0
  175. package/dist/src/react/react-wizard-agent.js.map +1 -0
  176. package/dist/src/react-router/react-router-wizard-agent.d.ts +6 -0
  177. package/dist/src/react-router/react-router-wizard-agent.js +103 -0
  178. package/dist/src/react-router/react-router-wizard-agent.js.map +1 -0
  179. package/dist/src/react-router/utils.d.ts +19 -0
  180. package/dist/src/react-router/utils.js +210 -0
  181. package/dist/src/react-router/utils.js.map +1 -0
  182. package/dist/src/run.d.ts +24 -0
  183. package/dist/src/run.js +48 -0
  184. package/dist/src/run.js.map +1 -0
  185. package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
  186. package/dist/src/steps/add-or-update-environment-variables.js +155 -0
  187. package/dist/src/steps/add-or-update-environment-variables.js.map +1 -0
  188. package/dist/src/steps/index.d.ts +3 -0
  189. package/dist/src/steps/index.js +4 -0
  190. package/dist/src/steps/index.js.map +1 -0
  191. package/dist/src/steps/run-prettier.d.ts +5 -0
  192. package/dist/src/steps/run-prettier.js +54 -0
  193. package/dist/src/steps/run-prettier.js.map +1 -0
  194. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
  195. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +7 -0
  196. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
  197. package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
  198. package/dist/src/steps/upload-environment-variables/index.js +57 -0
  199. package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
  200. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
  201. package/dist/src/steps/upload-environment-variables/providers/vercel.js +104 -0
  202. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
  203. package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +2 -0
  204. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +49 -0
  205. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
  206. package/dist/src/telemetry.d.ts +2 -0
  207. package/dist/src/telemetry.js +29 -0
  208. package/dist/src/telemetry.js.map +1 -0
  209. package/dist/src/utils/analytics.d.ts +24 -0
  210. package/dist/src/utils/analytics.js +139 -0
  211. package/dist/src/utils/analytics.js.map +1 -0
  212. package/dist/src/utils/bash.d.ts +2 -0
  213. package/dist/src/utils/bash.js +17 -0
  214. package/dist/src/utils/bash.js.map +1 -0
  215. package/dist/src/utils/clack-utils.d.ts +93 -0
  216. package/dist/src/utils/clack-utils.js +397 -0
  217. package/dist/src/utils/clack-utils.js.map +1 -0
  218. package/dist/src/utils/clack.d.ts +5 -0
  219. package/dist/src/utils/clack.js +34 -0
  220. package/dist/src/utils/clack.js.map +1 -0
  221. package/dist/src/utils/cli-symbols.d.ts +32 -0
  222. package/dist/src/utils/cli-symbols.js +46 -0
  223. package/dist/src/utils/cli-symbols.js.map +1 -0
  224. package/dist/src/utils/debug.d.ts +7 -0
  225. package/dist/src/utils/debug.js +88 -0
  226. package/dist/src/utils/debug.js.map +1 -0
  227. package/dist/src/utils/env-parser.d.ts +5 -0
  228. package/dist/src/utils/env-parser.js +18 -0
  229. package/dist/src/utils/env-parser.js.map +1 -0
  230. package/dist/src/utils/environment.d.ts +4 -0
  231. package/dist/src/utils/environment.js +69 -0
  232. package/dist/src/utils/environment.js.map +1 -0
  233. package/dist/src/utils/errors.d.ts +3 -0
  234. package/dist/src/utils/errors.js +7 -0
  235. package/dist/src/utils/errors.js.map +1 -0
  236. package/dist/src/utils/logging.d.ts +9 -0
  237. package/dist/src/utils/logging.js +36 -0
  238. package/dist/src/utils/logging.js.map +1 -0
  239. package/dist/src/utils/package-json.d.ts +25 -0
  240. package/dist/src/utils/package-json.js +21 -0
  241. package/dist/src/utils/package-json.js.map +1 -0
  242. package/dist/src/utils/package-manager.d.ts +21 -0
  243. package/dist/src/utils/package-manager.js +167 -0
  244. package/dist/src/utils/package-manager.js.map +1 -0
  245. package/dist/src/utils/redact.d.ts +5 -0
  246. package/dist/src/utils/redact.js +29 -0
  247. package/dist/src/utils/redact.js.map +1 -0
  248. package/dist/src/utils/semver.d.ts +10 -0
  249. package/dist/src/utils/semver.js +43 -0
  250. package/dist/src/utils/semver.js.map +1 -0
  251. package/dist/src/utils/string.d.ts +1 -0
  252. package/dist/src/utils/string.js +6 -0
  253. package/dist/src/utils/string.js.map +1 -0
  254. package/dist/src/utils/telemetry-client.d.ts +15 -0
  255. package/dist/src/utils/telemetry-client.js +57 -0
  256. package/dist/src/utils/telemetry-client.js.map +1 -0
  257. package/dist/src/utils/telemetry-types.d.ts +51 -0
  258. package/dist/src/utils/telemetry-types.js +6 -0
  259. package/dist/src/utils/telemetry-types.js.map +1 -0
  260. package/dist/src/utils/types.d.ts +80 -0
  261. package/dist/src/utils/types.js +2 -0
  262. package/dist/src/utils/types.js.map +1 -0
  263. package/dist/src/utils/urls.d.ts +7 -0
  264. package/dist/src/utils/urls.js +8 -0
  265. package/dist/src/utils/urls.js.map +1 -0
  266. package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
  267. package/dist/src/utils/vendor/is-unicorn-supported.js +21 -0
  268. package/dist/src/utils/vendor/is-unicorn-supported.js.map +1 -0
  269. package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +2 -0
  270. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js +47 -0
  271. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +1 -0
  272. package/package.json +76 -84
  273. package/skills/workos-authkit-base/SKILL.md +113 -0
  274. package/skills/workos-authkit-nextjs/SKILL.md +115 -0
  275. package/skills/workos-authkit-react/SKILL.md +91 -0
  276. package/skills/workos-authkit-react-router/SKILL.md +106 -0
  277. package/skills/workos-authkit-tanstack-start/SKILL.md +104 -0
  278. package/skills/workos-authkit-vanilla-js/SKILL.md +81 -0
  279. package/build/apps/index.js +0 -50
  280. package/build/apps/slack.js +0 -151
  281. package/build/cli.js +0 -42
  282. package/build/config.js +0 -34
  283. package/build/dev.js +0 -5
  284. package/build/enable-api-access.png +0 -0
  285. package/build/groups.js +0 -480
  286. package/build/index.js +0 -3
  287. package/build/info.js +0 -69
  288. package/build/login.js +0 -161
  289. package/build/main.js +0 -214
  290. package/build/users.js +0 -402
  291. package/build/util.js +0 -157
  292. package/coverage/clover.xml +0 -66
  293. package/coverage/coverage-final.json +0 -4
  294. package/coverage/lcov-report/base.css +0 -212
  295. package/coverage/lcov-report/cli.ts.html +0 -329
  296. package/coverage/lcov-report/config.ts.html +0 -152
  297. package/coverage/lcov-report/index.html +0 -119
  298. package/coverage/lcov-report/prettify.css +0 -1
  299. package/coverage/lcov-report/prettify.js +0 -1
  300. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  301. package/coverage/lcov-report/sorter.js +0 -158
  302. package/coverage/lcov-report/util.ts.html +0 -350
  303. package/coverage/lcov.info +0 -121
  304. package/package-lock.json +0 -7617
  305. package/tests/util.test.ts +0 -35
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/lib/validation/validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'fs/promises';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport fg from 'fast-glob';\nimport type { ValidationResult, ValidationRules, ValidationIssue } from './types.js';\nimport { runBuildValidation } from './build-validator.js';\n\nexport interface ValidateOptions {\n variant?: string;\n runBuild?: boolean;\n}\n\nexport async function validateInstallation(\n framework: string,\n projectDir: string,\n options: ValidateOptions = {},\n): Promise<ValidationResult> {\n const startTime = Date.now();\n const issues: ValidationIssue[] = [];\n\n // Load rules for framework (with optional variant)\n const rules = await loadRules(framework, options.variant);\n if (!rules) {\n return {\n passed: true,\n framework,\n issues: [],\n durationMs: Date.now() - startTime,\n };\n }\n\n // Run validations\n await validatePackages(rules, projectDir, issues);\n await validateEnvVars(rules, projectDir, issues);\n await validateFiles(rules, projectDir, issues);\n\n // Run framework-specific cross-validations\n await validateFrameworkSpecific(framework, projectDir, issues);\n\n // Run build validation if enabled\n if (options.runBuild !== false) {\n const buildResult = await runBuildValidation(projectDir);\n issues.push(...buildResult.issues);\n }\n\n return {\n passed: issues.filter((i) => i.severity === 'error').length === 0,\n framework,\n issues,\n durationMs: Date.now() - startTime,\n };\n}\n\nasync function loadRules(framework: string, variant?: string): Promise<ValidationRules | null> {\n const rulesPath = new URL(`./rules/${framework}.json`, import.meta.url);\n try {\n const content = await readFile(rulesPath, 'utf-8');\n const rules = JSON.parse(content) as ValidationRules;\n\n // Merge variant rules if specified\n if (variant && rules.variants?.[variant]) {\n const variantRules = rules.variants[variant];\n return {\n ...rules,\n files: [...rules.files, ...(variantRules.files || [])],\n packages: [...rules.packages, ...(variantRules.packages || [])],\n envVars: [...rules.envVars, ...(variantRules.envVars || [])],\n };\n }\n\n return rules;\n } catch {\n return null; // No rules for this framework yet\n }\n}\n\nasync function validatePackages(rules: ValidationRules, projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const pkgPath = join(projectDir, 'package.json');\n if (!existsSync(pkgPath)) return;\n\n let pkg: Record<string, unknown>;\n try {\n pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n } catch {\n // Malformed package.json - skip package validation\n return;\n }\n\n const deps = (pkg.dependencies || {}) as Record<string, string>;\n const devDeps = (pkg.devDependencies || {}) as Record<string, string>;\n const allDeps = { ...devDeps, ...deps };\n\n for (const rule of rules.packages) {\n const location = rule.location || 'any';\n const searchIn = location === 'any' ? allDeps : location === 'dependencies' ? deps : devDeps;\n\n if (!searchIn[rule.name]) {\n issues.push({\n type: 'package',\n severity: 'error',\n message: `Missing package: ${rule.name}`,\n hint: `Run: npm install ${rule.name}`,\n });\n }\n }\n}\n\nasync function validateEnvVars(rules: ValidationRules, projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const envPath = join(projectDir, '.env.local');\n let envContent = '';\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n if (rules.envVars.length > 0) {\n issues.push({\n type: 'env',\n severity: 'error',\n message: 'Missing .env.local file',\n hint: 'Create .env.local with required environment variables',\n });\n }\n return;\n }\n\n for (const rule of rules.envVars) {\n // Check primary name and any alternates\n const varsToCheck = [rule.name, ...(rule.alternates || [])];\n const found = varsToCheck.some((varName) => {\n const pattern = new RegExp(`^${varName}=.+`, 'm');\n return pattern.test(envContent);\n });\n\n if (!found) {\n const hint = rule.alternates\n ? `Add ${rule.name} (or one of: ${rule.alternates.join(', ')}) to .env.local`\n : `Add ${rule.name}=your_value to .env.local`;\n\n issues.push({\n type: 'env',\n severity: rule.required === false ? 'warning' : 'error',\n message: `Missing environment variable: ${rule.name}`,\n hint,\n });\n }\n }\n}\n\nasync function validateFiles(rules: ValidationRules, projectDir: string, issues: ValidationIssue[]): Promise<void> {\n for (const rule of rules.files) {\n let matches: string[];\n try {\n matches = await fg(rule.path, { cwd: projectDir });\n } catch {\n // Invalid glob pattern - skip\n continue;\n }\n\n if (matches.length === 0) {\n issues.push({\n type: 'file',\n severity: 'error',\n message: `Missing file: ${rule.path}`,\n hint: `Create ${rule.path}`,\n });\n continue;\n }\n\n // Check content patterns\n if (rule.mustContain || rule.mustContainAny) {\n const filePath = join(projectDir, matches[0]);\n let content: string;\n try {\n content = await readFile(filePath, 'utf-8');\n } catch {\n // File read error - skip content checks\n continue;\n }\n\n // All must be present\n if (rule.mustContain) {\n for (const pattern of rule.mustContain) {\n if (!content.includes(pattern)) {\n issues.push({\n type: 'pattern',\n severity: 'warning',\n message: `File ${matches[0]} missing expected pattern: \"${pattern}\"`,\n hint: `Ensure ${matches[0]} contains: ${pattern}`,\n });\n }\n }\n }\n\n // At least one must be present\n if (rule.mustContainAny) {\n const hasAny = rule.mustContainAny.some((p) => content.includes(p));\n if (!hasAny) {\n issues.push({\n type: 'pattern',\n severity: 'warning',\n message: `File ${matches[0]} missing one of: ${rule.mustContainAny.join(', ')}`,\n hint: `Ensure ${matches[0]} contains one of these patterns`,\n });\n }\n }\n }\n }\n}\n\n/**\n * Framework-specific cross-validations that require reading multiple sources.\n */\nasync function validateFrameworkSpecific(\n framework: string,\n projectDir: string,\n issues: ValidationIssue[],\n): Promise<void> {\n // Universal cross-validations\n await validateCredentialFormats(projectDir, issues);\n await validateDuplicateEnvVars(projectDir, issues);\n\n // Framework-specific validations\n switch (framework) {\n case 'nextjs':\n await validateNextjsRedirectUri(projectDir, issues);\n await validateNextjsMiddlewarePlacement(projectDir, issues);\n await validateCookiePasswordLength(projectDir, issues, 'WORKOS_COOKIE_PASSWORD');\n break;\n case 'react':\n await validateReactProviderWrapping(projectDir, issues);\n break;\n case 'react-router':\n await validateReactRouterRedirectUri(projectDir, issues);\n await validateCookiePasswordLength(projectDir, issues, 'WORKOS_COOKIE_PASSWORD');\n break;\n case 'tanstack-start':\n await validateTanstackStartRedirectUri(projectDir, issues);\n await validateCookiePasswordLength(projectDir, issues, 'WORKOS_COOKIE_PASSWORD');\n break;\n }\n}\n\n/**\n * Validates that the Next.js redirect URI matches an existing callback route.\n *\n * Common failure: .env.local has /auth/callback but route is at /api/auth/callback\n */\nasync function validateNextjsRedirectUri(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const envPath = join(projectDir, '.env.local');\n let envContent: string;\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n return; // No .env.local - other validators handle this\n }\n\n // Extract redirect URI value\n const match = envContent.match(/^NEXT_PUBLIC_WORKOS_REDIRECT_URI=(.+)$/m);\n if (!match) {\n return; // Missing env var - other validators handle this\n }\n\n const redirectUri = match[1].trim();\n let callbackPath: string;\n\n try {\n const url = new URL(redirectUri);\n callbackPath = url.pathname;\n } catch {\n issues.push({\n type: 'env',\n severity: 'error',\n message: `Invalid redirect URI: ${redirectUri}`,\n hint: 'NEXT_PUBLIC_WORKOS_REDIRECT_URI must be a valid URL',\n });\n return;\n }\n\n // Remove leading slash for path matching\n const routePath = callbackPath.replace(/^\\//, '');\n\n // Check if route file exists at expected location (Next.js App Router)\n const routePatterns = [\n `app/${routePath}/route.ts`,\n `app/${routePath}/route.tsx`,\n `app/${routePath}/route.js`,\n `app/${routePath}/route.jsx`,\n `src/app/${routePath}/route.ts`,\n `src/app/${routePath}/route.tsx`,\n `src/app/${routePath}/route.js`,\n `src/app/${routePath}/route.jsx`,\n ];\n\n const routeExists = routePatterns.some((pattern) => existsSync(join(projectDir, pattern)));\n\n if (!routeExists) {\n // Check what routes DO exist to give a better hint\n const existingRoutes = await fg(\n ['app/**/callback/**/route.{ts,tsx,js,jsx}', 'src/app/**/callback/**/route.{ts,tsx,js,jsx}'],\n {\n cwd: projectDir,\n },\n );\n\n let hint = `Create a route handler at app/${routePath}/route.ts`;\n if (existingRoutes.length > 0) {\n // Found a route at a different path - likely the mismatch\n const actualPath = '/' + existingRoutes[0].replace(/^(src\\/)?app\\//, '').replace(/\\/route\\.(ts|tsx|js|jsx)$/, '');\n hint =\n `Found callback route at ${existingRoutes[0]} but redirect URI points to ${callbackPath}. Either:\\n` +\n ` 1. Change NEXT_PUBLIC_WORKOS_REDIRECT_URI to http://localhost:3000${actualPath}\\n` +\n ` 2. Move the route to app/${routePath}/route.ts`;\n }\n\n issues.push({\n type: 'file',\n severity: 'error',\n message: `Redirect URI path \"${callbackPath}\" has no matching route file`,\n hint,\n });\n }\n}\n\n/**\n * Validates that the React Router redirect URI matches an existing callback route.\n *\n * React Router v7 framework mode uses file-based routing:\n * - /auth/callback → app/routes/auth.callback.tsx (dot notation)\n * - /auth/callback → app/routes/auth/callback.tsx (nested folders)\n */\nasync function validateReactRouterRedirectUri(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const envPath = join(projectDir, '.env.local');\n let envContent: string;\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n return;\n }\n\n const match = envContent.match(/^WORKOS_REDIRECT_URI=(.+)$/m);\n if (!match) {\n return;\n }\n\n const redirectUri = match[1].trim();\n let callbackPath: string;\n\n try {\n const url = new URL(redirectUri);\n callbackPath = url.pathname;\n } catch {\n issues.push({\n type: 'env',\n severity: 'error',\n message: `Invalid redirect URI: ${redirectUri}`,\n hint: 'WORKOS_REDIRECT_URI must be a valid URL',\n });\n return;\n }\n\n const routePath = callbackPath.replace(/^\\//, '');\n // React Router uses dot notation: /auth/callback → auth.callback\n const dotPath = routePath.replace(/\\//g, '.');\n\n // Check possible route file locations\n const routePatterns = [\n // Dot notation (e.g., app/routes/auth.callback.tsx)\n `app/routes/${dotPath}.tsx`,\n `app/routes/${dotPath}.ts`,\n `app/routes/${dotPath}.jsx`,\n `app/routes/${dotPath}.js`,\n // Nested folders (e.g., app/routes/auth/callback.tsx)\n `app/routes/${routePath}.tsx`,\n `app/routes/${routePath}.ts`,\n `app/routes/${routePath}.jsx`,\n `app/routes/${routePath}.js`,\n // Index file in folder (e.g., app/routes/auth/callback/index.tsx)\n `app/routes/${routePath}/index.tsx`,\n `app/routes/${routePath}/index.ts`,\n `app/routes/${routePath}/index.jsx`,\n `app/routes/${routePath}/index.js`,\n // Route file in folder (e.g., app/routes/auth/callback/route.tsx)\n `app/routes/${routePath}/route.tsx`,\n `app/routes/${routePath}/route.ts`,\n `app/routes/${routePath}/route.jsx`,\n `app/routes/${routePath}/route.js`,\n ];\n\n const routeExists = routePatterns.some((pattern) => existsSync(join(projectDir, pattern)));\n\n if (!routeExists) {\n const existingRoutes = await fg(['app/routes/**/*callback*.{ts,tsx,js,jsx}'], {\n cwd: projectDir,\n });\n\n let hint = `Create a route at app/routes/${dotPath}.tsx`;\n if (existingRoutes.length > 0) {\n const actualFile = existingRoutes[0];\n // Convert file path back to URL path\n const actualPath =\n '/' +\n actualFile\n .replace(/^app\\/routes\\//, '')\n .replace(/\\.(tsx?|jsx?)$/, '')\n .replace(/\\/(index|route)$/, '')\n .replace(/\\./g, '/');\n hint =\n `Found callback route at ${actualFile} but redirect URI points to ${callbackPath}. Either:\\n` +\n ` 1. Change WORKOS_REDIRECT_URI to http://localhost:3000${actualPath}\\n` +\n ` 2. Move the route to app/routes/${dotPath}.tsx`;\n }\n\n issues.push({\n type: 'file',\n severity: 'error',\n message: `Redirect URI path \"${callbackPath}\" has no matching route file`,\n hint,\n });\n }\n}\n\n/**\n * Validates that the TanStack Start redirect URI matches an existing callback route.\n *\n * TanStack Start uses file-based routing:\n * - /auth/callback → app/routes/auth/callback.tsx\n */\nasync function validateTanstackStartRedirectUri(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const envPath = join(projectDir, '.env.local');\n let envContent: string;\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n return;\n }\n\n const match = envContent.match(/^WORKOS_REDIRECT_URI=(.+)$/m);\n if (!match) {\n return;\n }\n\n const redirectUri = match[1].trim();\n let callbackPath: string;\n\n try {\n const url = new URL(redirectUri);\n callbackPath = url.pathname;\n } catch {\n issues.push({\n type: 'env',\n severity: 'error',\n message: `Invalid redirect URI: ${redirectUri}`,\n hint: 'WORKOS_REDIRECT_URI must be a valid URL',\n });\n return;\n }\n\n const routePath = callbackPath.replace(/^\\//, '');\n\n // TanStack Start route patterns\n const routePatterns = [\n `app/routes/${routePath}.tsx`,\n `app/routes/${routePath}.ts`,\n `app/routes/${routePath}.jsx`,\n `app/routes/${routePath}.js`,\n `app/routes/${routePath}/index.tsx`,\n `app/routes/${routePath}/index.ts`,\n `app/routes/${routePath}/index.jsx`,\n `app/routes/${routePath}/index.js`,\n ];\n\n const routeExists = routePatterns.some((pattern) => existsSync(join(projectDir, pattern)));\n\n if (!routeExists) {\n const existingRoutes = await fg(['app/routes/**/*callback*.{ts,tsx,js,jsx}'], {\n cwd: projectDir,\n });\n\n let hint = `Create a route at app/routes/${routePath}.tsx`;\n if (existingRoutes.length > 0) {\n const actualFile = existingRoutes[0];\n const actualPath =\n '/' +\n actualFile\n .replace(/^app\\/routes\\//, '')\n .replace(/\\.(tsx?|jsx?)$/, '')\n .replace(/\\/index$/, '');\n hint =\n `Found callback route at ${actualFile} but redirect URI points to ${callbackPath}. Either:\\n` +\n ` 1. Change WORKOS_REDIRECT_URI to http://localhost:3000${actualPath}\\n` +\n ` 2. Move the route to app/routes/${routePath}.tsx`;\n }\n\n issues.push({\n type: 'file',\n severity: 'error',\n message: `Redirect URI path \"${callbackPath}\" has no matching route file`,\n hint,\n });\n }\n}\n\n/**\n * Validates cookie password is at least 32 characters.\n * WorkOS requires this for secure session encryption.\n */\nasync function validateCookiePasswordLength(\n projectDir: string,\n issues: ValidationIssue[],\n envVarName: string,\n): Promise<void> {\n const envPath = join(projectDir, '.env.local');\n let envContent: string;\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n return; // No .env.local - other validators handle this\n }\n\n const match = envContent.match(new RegExp(`^${envVarName}=(.*)$`, 'm'));\n if (!match) {\n return; // Missing env var - other validators handle this\n }\n\n const password = match[1].trim();\n if (password.length < 32) {\n issues.push({\n type: 'env',\n severity: 'error',\n message: `${envVarName} must be at least 32 characters (currently ${password.length})`,\n hint: `Generate a secure password: openssl rand -base64 32`,\n });\n }\n}\n\n/**\n * Validates credential formats:\n * - API key should start with sk_\n * - Client ID should start with client_\n */\nasync function validateCredentialFormats(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const envPath = join(projectDir, '.env.local');\n let envContent: string;\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n return;\n }\n\n // Check API key format (any common variation)\n const apiKeyPatterns = [/^WORKOS_API_KEY=(.*)$/m, /^NEXT_PUBLIC_WORKOS_API_KEY=(.*)$/m];\n\n for (const pattern of apiKeyPatterns) {\n const match = envContent.match(pattern);\n if (match) {\n const value = match[1].trim();\n if (value && !value.startsWith('sk_')) {\n issues.push({\n type: 'env',\n severity: 'error',\n message: `Invalid API key format: \"${value.substring(0, 10)}...\"`,\n hint: 'WorkOS API keys start with \"sk_\". Check your WorkOS Dashboard for the correct key.',\n });\n }\n }\n }\n\n // Check Client ID format\n const clientIdPatterns = [/^WORKOS_CLIENT_ID=(.*)$/m, /^NEXT_PUBLIC_WORKOS_CLIENT_ID=(.*)$/m];\n\n for (const pattern of clientIdPatterns) {\n const match = envContent.match(pattern);\n if (match) {\n const value = match[1].trim();\n if (value && !value.startsWith('client_')) {\n issues.push({\n type: 'env',\n severity: 'error',\n message: `Invalid Client ID format: \"${value.substring(0, 15)}...\"`,\n hint: 'WorkOS Client IDs start with \"client_\". Check your WorkOS Dashboard for the correct ID.',\n });\n }\n }\n }\n}\n\n/**\n * Validates Next.js middleware.ts is at the correct location.\n * Must be at project root or src/ folder, not nested deeper.\n */\nasync function validateNextjsMiddlewarePlacement(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n // Valid locations\n const validPaths = ['middleware.ts', 'middleware.js', 'src/middleware.ts', 'src/middleware.js'];\n\n const hasValidMiddleware = validPaths.some((p) => existsSync(join(projectDir, p)));\n if (hasValidMiddleware) {\n return; // Correctly placed\n }\n\n // Check for misplaced middleware\n const misplacedMiddleware = await fg(['**/middleware.{ts,js}'], {\n cwd: projectDir,\n ignore: ['node_modules/**'],\n });\n\n if (misplacedMiddleware.length > 0) {\n issues.push({\n type: 'file',\n severity: 'error',\n message: `middleware.ts found at wrong location: ${misplacedMiddleware[0]}`,\n hint: 'Next.js middleware must be at project root (middleware.ts) or src/middleware.ts, not nested in app/ or other folders.',\n });\n }\n}\n\n/**\n * Validates React SPA has AuthKitProvider wrapping the app.\n */\nasync function validateReactProviderWrapping(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n // Common entry points for React apps\n const entryPatterns = [\n 'src/main.tsx',\n 'src/main.jsx',\n 'src/index.tsx',\n 'src/index.jsx',\n 'src/App.tsx',\n 'src/App.jsx',\n 'app/layout.tsx',\n 'app/layout.jsx',\n ];\n\n let foundProvider = false;\n\n for (const pattern of entryPatterns) {\n const filePath = join(projectDir, pattern);\n if (!existsSync(filePath)) continue;\n\n try {\n const content = await readFile(filePath, 'utf-8');\n if (content.includes('AuthKitProvider')) {\n foundProvider = true;\n break;\n }\n } catch {\n continue;\n }\n }\n\n if (!foundProvider) {\n // Check if package is installed (if not, other validators handle it)\n const pkgPath = join(projectDir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (deps['@workos-inc/authkit-react']) {\n issues.push({\n type: 'pattern',\n severity: 'warning',\n message: 'AuthKitProvider not found in common entry points',\n hint: 'Wrap your app with <AuthKitProvider> in main.tsx or App.tsx. See: https://workos.com/docs/user-management/react/authkit',\n });\n }\n } catch {\n // Malformed package.json - skip\n }\n }\n }\n}\n\n/**\n * Detects duplicate env vars between .env and .env.local with different values.\n * This can cause confusing behavior where wrong values are used.\n */\nasync function validateDuplicateEnvVars(projectDir: string, issues: ValidationIssue[]): Promise<void> {\n const envPath = join(projectDir, '.env');\n const envLocalPath = join(projectDir, '.env.local');\n\n let envContent: string;\n let envLocalContent: string;\n\n try {\n envContent = await readFile(envPath, 'utf-8');\n } catch {\n return; // No .env file - no conflict possible\n }\n\n try {\n envLocalContent = await readFile(envLocalPath, 'utf-8');\n } catch {\n return; // No .env.local - no conflict possible\n }\n\n // Parse env files into key-value maps\n const parseEnv = (content: string): Map<string, string> => {\n const map = new Map<string, string>();\n for (const line of content.split('\\n')) {\n const match = line.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/);\n if (match) {\n map.set(match[1], match[2].trim());\n }\n }\n return map;\n };\n\n const envVars = parseEnv(envContent);\n const envLocalVars = parseEnv(envLocalContent);\n\n // Check for WorkOS-related vars that differ\n const workosVars = [\n 'WORKOS_API_KEY',\n 'WORKOS_CLIENT_ID',\n 'WORKOS_REDIRECT_URI',\n 'WORKOS_COOKIE_PASSWORD',\n 'NEXT_PUBLIC_WORKOS_CLIENT_ID',\n 'NEXT_PUBLIC_WORKOS_REDIRECT_URI',\n ];\n\n for (const varName of workosVars) {\n const envValue = envVars.get(varName);\n const localValue = envLocalVars.get(varName);\n\n if (envValue && localValue && envValue !== localValue) {\n issues.push({\n type: 'env',\n severity: 'warning',\n message: `${varName} has different values in .env and .env.local`,\n hint: `.env.local takes precedence. Remove from .env to avoid confusion, or ensure they match.`,\n });\n }\n }\n}\n"]}
@@ -0,0 +1,200 @@
1
+ import { type ActorRefFrom } from 'xstate';
2
+ import type { WizardMachineContext, WizardMachineInput, DetectionOutput, GitCheckOutput, AgentOutput } from './wizard-core.types.js';
3
+ import type { WizardOptions } from '../utils/types.js';
4
+ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineContext, {
5
+ type: "START";
6
+ } | {
7
+ type: "SKIP_AUTH";
8
+ } | {
9
+ type: "GIT_CONFIRMED";
10
+ } | {
11
+ type: "GIT_CANCELLED";
12
+ } | {
13
+ type: "CREDENTIALS_SUBMITTED";
14
+ apiKey: string;
15
+ clientId: string;
16
+ } | {
17
+ type: "CANCEL";
18
+ }, {
19
+ [x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<boolean, {
20
+ options: WizardOptions;
21
+ }, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<DetectionOutput, {
22
+ options: WizardOptions;
23
+ }, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<GitCheckOutput, {
24
+ installDir: string;
25
+ }, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<void, {
26
+ context: WizardMachineContext;
27
+ }, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<AgentOutput, {
28
+ context: WizardMachineContext;
29
+ }, import("xstate").EventObject>> | undefined;
30
+ }, {
31
+ src: "checkAuthentication";
32
+ logic: import("xstate").PromiseActorLogic<boolean, {
33
+ options: WizardOptions;
34
+ }, import("xstate").EventObject>;
35
+ id: string | undefined;
36
+ } | {
37
+ src: "detectIntegration";
38
+ logic: import("xstate").PromiseActorLogic<DetectionOutput, {
39
+ options: WizardOptions;
40
+ }, import("xstate").EventObject>;
41
+ id: string | undefined;
42
+ } | {
43
+ src: "checkGitStatus";
44
+ logic: import("xstate").PromiseActorLogic<GitCheckOutput, {
45
+ installDir: string;
46
+ }, import("xstate").EventObject>;
47
+ id: string | undefined;
48
+ } | {
49
+ src: "configureEnvironment";
50
+ logic: import("xstate").PromiseActorLogic<void, {
51
+ context: WizardMachineContext;
52
+ }, import("xstate").EventObject>;
53
+ id: string | undefined;
54
+ } | {
55
+ src: "runAgent";
56
+ logic: import("xstate").PromiseActorLogic<AgentOutput, {
57
+ context: WizardMachineContext;
58
+ }, import("xstate").EventObject>;
59
+ id: string | undefined;
60
+ }, {
61
+ type: "emitStateEnter";
62
+ params: {
63
+ state: string;
64
+ };
65
+ } | {
66
+ type: "emitStateExit";
67
+ params: {
68
+ state: string;
69
+ };
70
+ } | {
71
+ type: "emitAuthChecking";
72
+ params: unknown;
73
+ } | {
74
+ type: "emitAuthRequired";
75
+ params: unknown;
76
+ } | {
77
+ type: "emitAuthSuccess";
78
+ params: unknown;
79
+ } | {
80
+ type: "emitAuthFailure";
81
+ params: unknown;
82
+ } | {
83
+ type: "emitDetectionStart";
84
+ params: unknown;
85
+ } | {
86
+ type: "emitDetectionComplete";
87
+ params: unknown;
88
+ } | {
89
+ type: "emitGitChecking";
90
+ params: unknown;
91
+ } | {
92
+ type: "emitGitClean";
93
+ params: unknown;
94
+ } | {
95
+ type: "emitGitDirty";
96
+ params: unknown;
97
+ } | {
98
+ type: "emitGitConfirmed";
99
+ params: unknown;
100
+ } | {
101
+ type: "emitGitCancelled";
102
+ params: unknown;
103
+ } | {
104
+ type: "emitCredentialsGathering";
105
+ params: unknown;
106
+ } | {
107
+ type: "emitCredentialsFound";
108
+ params: unknown;
109
+ } | {
110
+ type: "emitConfigStart";
111
+ params: unknown;
112
+ } | {
113
+ type: "emitConfigComplete";
114
+ params: unknown;
115
+ } | {
116
+ type: "emitAgentStart";
117
+ params: unknown;
118
+ } | {
119
+ type: "emitAgentSuccess";
120
+ params: {
121
+ summary?: string;
122
+ };
123
+ } | {
124
+ type: "emitAgentFailure";
125
+ params: unknown;
126
+ } | {
127
+ type: "assignDetectionResult";
128
+ params: import("xstate").NonReducibleUnknown;
129
+ } | {
130
+ type: "assignGitResult";
131
+ params: import("xstate").NonReducibleUnknown;
132
+ } | {
133
+ type: "assignCredentials";
134
+ params: import("xstate").NonReducibleUnknown;
135
+ } | {
136
+ type: "assignError";
137
+ params: import("xstate").NonReducibleUnknown;
138
+ } | {
139
+ type: "emitCancelled";
140
+ params: unknown;
141
+ } | {
142
+ type: "emitError";
143
+ params: unknown;
144
+ }, {
145
+ type: "shouldSkipAuth";
146
+ params: unknown;
147
+ } | {
148
+ type: "gitIsClean";
149
+ params: unknown;
150
+ } | {
151
+ type: "hasCredentials";
152
+ params: unknown;
153
+ } | {
154
+ type: "hasIntegration";
155
+ params: unknown;
156
+ }, never, "error" | "cancelled" | "complete" | "idle" | "authenticating" | "configuring" | "runningAgent" | {
157
+ preparing: {
158
+ detection: "done" | "running";
159
+ gitCheck: "done" | "running" | "evaluating" | "awaitingConfirmation";
160
+ };
161
+ } | {
162
+ gatheringCredentials: "checking" | "prompting";
163
+ }, string, WizardMachineInput, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
164
+ id: "wizard";
165
+ states: {
166
+ readonly idle: {};
167
+ readonly authenticating: {};
168
+ readonly preparing: {
169
+ states: {
170
+ readonly detection: {
171
+ states: {
172
+ readonly running: {};
173
+ readonly done: {};
174
+ };
175
+ };
176
+ readonly gitCheck: {
177
+ states: {
178
+ readonly running: {};
179
+ readonly evaluating: {};
180
+ readonly awaitingConfirmation: {};
181
+ readonly done: {};
182
+ };
183
+ };
184
+ };
185
+ };
186
+ readonly gatheringCredentials: {
187
+ states: {
188
+ readonly checking: {};
189
+ readonly prompting: {};
190
+ };
191
+ };
192
+ readonly configuring: {};
193
+ readonly runningAgent: {};
194
+ readonly complete: {};
195
+ readonly cancelled: {};
196
+ readonly error: {};
197
+ };
198
+ }>;
199
+ export type WizardMachine = typeof wizardMachine;
200
+ export type WizardActor = ActorRefFrom<typeof wizardMachine>;