workos 0.2.0 → 0.3.2

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 (401) hide show
  1. package/.claude-plugin/plugin.json +3 -3
  2. package/README.md +3 -2
  3. package/dist/bin.js +42 -20
  4. package/dist/bin.js.map +1 -1
  5. package/dist/cli.config.d.ts +6 -2
  6. package/dist/cli.config.js +8 -2
  7. package/dist/cli.config.js.map +1 -1
  8. package/dist/commands/install-skill.js.map +1 -0
  9. package/dist/{src/commands → commands}/install.js +8 -12
  10. package/dist/commands/install.js.map +1 -0
  11. package/dist/{src/commands → commands}/login.js +3 -2
  12. package/dist/commands/login.js.map +1 -0
  13. package/dist/commands/logout.js.map +1 -0
  14. package/dist/craft-pre-release.sh +10 -0
  15. package/dist/dashboard/components/AnimatedLogo.js.map +1 -0
  16. package/dist/dashboard/components/CompletionView.js.map +1 -0
  17. package/dist/dashboard/components/ConfirmPrompt.js.map +1 -0
  18. package/dist/dashboard/components/CredentialsForm.js.map +1 -0
  19. package/dist/dashboard/components/Dashboard.js.map +1 -0
  20. package/dist/{src/dashboard → dashboard}/components/DashboardLayout.d.ts +2 -2
  21. package/dist/dashboard/components/DashboardLayout.js.map +1 -0
  22. package/dist/{src/dashboard → dashboard}/components/DiffPanel.d.ts +2 -2
  23. package/dist/dashboard/components/DiffPanel.js.map +1 -0
  24. package/dist/dashboard/components/InlinePrompt.js.map +1 -0
  25. package/dist/{src/dashboard → dashboard}/components/OutputPanel.d.ts +2 -2
  26. package/dist/dashboard/components/OutputPanel.js.map +1 -0
  27. package/dist/dashboard/components/Panel.js.map +1 -0
  28. package/dist/dashboard/components/TextInput.js.map +1 -0
  29. package/dist/dashboard/components/WelcomeArt.js.map +1 -0
  30. package/dist/dashboard/hooks/useAnimation.js.map +1 -0
  31. package/dist/dashboard/hooks/useKeyboard.js.map +1 -0
  32. package/dist/dashboard/hooks/useTerminalSize.js.map +1 -0
  33. package/dist/{src/dashboard → dashboard}/index.d.ts +2 -2
  34. package/dist/dashboard/index.js.map +1 -0
  35. package/dist/dashboard/lib/diff-utils.js.map +1 -0
  36. package/dist/dashboard/lib/logo-frames.js.map +1 -0
  37. package/dist/dashboard/lib/welcome-art.js.map +1 -0
  38. package/dist/dashboard/types.d.ts +5 -0
  39. package/dist/dashboard/types.js.map +1 -0
  40. package/dist/{src/lib → lib}/adapters/cli-adapter.d.ts +5 -5
  41. package/dist/{src/lib → lib}/adapters/cli-adapter.js +5 -5
  42. package/dist/lib/adapters/cli-adapter.js.map +1 -0
  43. package/dist/{src/lib → lib}/adapters/dashboard-adapter.d.ts +4 -4
  44. package/dist/lib/adapters/dashboard-adapter.js.map +1 -0
  45. package/dist/{src/lib → lib}/adapters/index.d.ts +1 -1
  46. package/dist/lib/adapters/index.js.map +1 -0
  47. package/dist/{src/lib → lib}/adapters/types.d.ts +4 -4
  48. package/dist/lib/adapters/types.js.map +1 -0
  49. package/dist/{src/lib → lib}/agent-interface.d.ts +15 -9
  50. package/dist/{src/lib → lib}/agent-interface.js +146 -61
  51. package/dist/lib/agent-interface.js.map +1 -0
  52. package/dist/{src/lib → lib}/agent-runner.d.ts +2 -2
  53. package/dist/{src/lib → lib}/agent-runner.js +4 -4
  54. package/dist/lib/agent-runner.js.map +1 -0
  55. package/dist/{src/lib → lib}/ai-content.d.ts +6 -2
  56. package/dist/lib/ai-content.js +130 -0
  57. package/dist/lib/ai-content.js.map +1 -0
  58. package/dist/lib/api.js.map +1 -0
  59. package/dist/lib/background-refresh.d.ts +29 -0
  60. package/dist/lib/background-refresh.js +95 -0
  61. package/dist/lib/background-refresh.js.map +1 -0
  62. package/dist/{src/lib → lib}/config.d.ts +6 -6
  63. package/dist/lib/config.js.map +1 -0
  64. package/dist/{src/lib → lib}/constants.d.ts +1 -1
  65. package/dist/{src/lib → lib}/constants.js +1 -1
  66. package/dist/lib/constants.js.map +1 -0
  67. package/dist/lib/credential-discovery.js.map +1 -0
  68. package/dist/lib/credential-proxy.d.ts +36 -0
  69. package/dist/lib/credential-proxy.js +298 -0
  70. package/dist/lib/credential-proxy.js.map +1 -0
  71. package/dist/{src/lib → lib}/credentials.d.ts +6 -0
  72. package/dist/{src/lib → lib}/credentials.js +33 -0
  73. package/dist/lib/credentials.js.map +1 -0
  74. package/dist/{src/lib → lib}/device-auth.d.ts +1 -0
  75. package/dist/{src/lib → lib}/device-auth.js +2 -1
  76. package/dist/lib/device-auth.js.map +1 -0
  77. package/dist/lib/ensure-auth.d.ts +22 -0
  78. package/dist/lib/ensure-auth.js +83 -0
  79. package/dist/lib/ensure-auth.js.map +1 -0
  80. package/dist/lib/env-writer.js.map +1 -0
  81. package/dist/{src/lib → lib}/events.d.ts +8 -8
  82. package/dist/{src/lib → lib}/events.js +3 -3
  83. package/dist/{src/lib → lib}/events.js.map +1 -1
  84. package/dist/{src/lib → lib}/framework-config.d.ts +2 -2
  85. package/dist/{src/lib → lib}/framework-config.js +1 -1
  86. package/dist/lib/framework-config.js.map +1 -0
  87. package/dist/lib/helper-functions.js.map +1 -0
  88. package/dist/{src/lib/wizard-core.d.ts → lib/installer-core.d.ts} +21 -17
  89. package/dist/{src/lib/wizard-core.js → lib/installer-core.js} +19 -17
  90. package/dist/lib/installer-core.js.map +1 -0
  91. package/dist/{src/lib/wizard-core.types.d.ts → lib/installer-core.types.d.ts} +9 -9
  92. package/dist/lib/installer-core.types.js +2 -0
  93. package/dist/lib/installer-core.types.js.map +1 -0
  94. package/dist/lib/port-detection.js.map +1 -0
  95. package/dist/lib/post-install.js.map +1 -0
  96. package/dist/lib/progress-tracker.js.map +1 -0
  97. package/dist/lib/run-with-core.d.ts +2 -0
  98. package/dist/{src/lib → lib}/run-with-core.js +38 -48
  99. package/dist/lib/run-with-core.js.map +1 -0
  100. package/dist/lib/safe-tools.js.map +1 -0
  101. package/dist/{src/lib → lib}/settings.d.ts +3 -0
  102. package/dist/{src/lib → lib}/settings.js +2 -3
  103. package/dist/lib/settings.js.map +1 -0
  104. package/dist/lib/staging-api.js.map +1 -0
  105. package/dist/lib/token-refresh-client.d.ts +23 -0
  106. package/dist/lib/token-refresh-client.js +88 -0
  107. package/dist/lib/token-refresh-client.js.map +1 -0
  108. package/dist/{src/lib → lib}/token-refresh.js +1 -1
  109. package/dist/lib/token-refresh.js.map +1 -0
  110. package/dist/lib/validation/build-validator.js.map +1 -0
  111. package/dist/lib/validation/index.js.map +1 -0
  112. package/dist/lib/validation/types.js.map +1 -0
  113. package/dist/lib/validation/validator.js.map +1 -0
  114. package/dist/{src/lib → lib}/workos-management.js +3 -3
  115. package/dist/lib/workos-management.js.map +1 -0
  116. package/dist/nextjs/nextjs-installer-agent.d.ts +6 -0
  117. package/dist/{src/nextjs/nextjs-wizard-agent.js → nextjs/nextjs-installer-agent.js} +6 -6
  118. package/dist/nextjs/nextjs-installer-agent.js.map +1 -0
  119. package/dist/{src/nextjs → nextjs}/utils.d.ts +2 -2
  120. package/dist/nextjs/utils.js.map +1 -0
  121. package/dist/react/react-installer-agent.d.ts +2 -0
  122. package/dist/{src/react/react-wizard-agent.js → react/react-installer-agent.js} +4 -4
  123. package/dist/react/react-installer-agent.js.map +1 -0
  124. package/dist/react-router/react-router-installer-agent.d.ts +6 -0
  125. package/dist/{src/react-router/react-router-wizard-agent.js → react-router/react-router-installer-agent.js} +6 -6
  126. package/dist/react-router/react-router-installer-agent.js.map +1 -0
  127. package/dist/{src/react-router → react-router}/utils.d.ts +2 -2
  128. package/dist/react-router/utils.js.map +1 -0
  129. package/dist/{src/run.d.ts → run.d.ts} +2 -1
  130. package/dist/{src/run.js → run.js} +5 -4
  131. package/dist/run.js.map +1 -0
  132. package/dist/{src/steps → steps}/add-or-update-environment-variables.js +5 -5
  133. package/dist/steps/add-or-update-environment-variables.js.map +1 -0
  134. package/dist/steps/index.js.map +1 -0
  135. package/dist/{src/steps → steps}/run-prettier.d.ts +2 -2
  136. package/dist/{src/steps → steps}/run-prettier.js +1 -1
  137. package/dist/steps/run-prettier.js.map +1 -0
  138. package/dist/{src/steps → steps}/upload-environment-variables/EnvironmentProvider.d.ts +3 -3
  139. package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
  140. package/dist/{src/steps → steps}/upload-environment-variables/index.d.ts +2 -2
  141. package/dist/{src/steps → steps}/upload-environment-variables/index.js +3 -3
  142. package/dist/steps/upload-environment-variables/index.js.map +1 -0
  143. package/dist/{src/steps → steps}/upload-environment-variables/providers/vercel.d.ts +2 -2
  144. package/dist/steps/upload-environment-variables/providers/vercel.js.map +1 -0
  145. package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +2 -0
  146. package/dist/{src/tanstack-start/tanstack-start-wizard-agent.js → tanstack-start/tanstack-start-installer-agent.js} +4 -4
  147. package/dist/tanstack-start/tanstack-start-installer-agent.js.map +1 -0
  148. package/dist/telemetry.js.map +1 -0
  149. package/dist/{src/utils → utils}/analytics.js +8 -8
  150. package/dist/utils/analytics.js.map +1 -0
  151. package/dist/utils/bash.js.map +1 -0
  152. package/dist/{src/utils → utils}/clack-utils.d.ts +9 -9
  153. package/dist/{src/utils → utils}/clack-utils.js +8 -8
  154. package/dist/utils/clack-utils.js.map +1 -0
  155. package/dist/utils/clack.js.map +1 -0
  156. package/dist/utils/cli-symbols.js.map +1 -0
  157. package/dist/{src/utils → utils}/debug.js +1 -1
  158. package/dist/utils/debug.js.map +1 -0
  159. package/dist/utils/env-parser.js.map +1 -0
  160. package/dist/utils/environment.d.ts +4 -0
  161. package/dist/{src/utils → utils}/environment.js +1 -1
  162. package/dist/utils/environment.js.map +1 -0
  163. package/dist/{src/utils → utils}/errors.js +1 -1
  164. package/dist/utils/errors.js.map +1 -0
  165. package/dist/utils/git-utils.js.map +1 -0
  166. package/dist/utils/logging.js.map +1 -0
  167. package/dist/utils/package-json.js.map +1 -0
  168. package/dist/{src/utils → utils}/package-manager.d.ts +4 -4
  169. package/dist/utils/package-manager.js.map +1 -0
  170. package/dist/utils/redact.js.map +1 -0
  171. package/dist/utils/semver.js.map +1 -0
  172. package/dist/utils/string.js.map +1 -0
  173. package/dist/{src/utils → utils}/telemetry-client.js +6 -2
  174. package/dist/utils/telemetry-client.js.map +1 -0
  175. package/dist/{src/utils → utils}/telemetry-types.d.ts +5 -5
  176. package/dist/utils/telemetry-types.js +6 -0
  177. package/dist/utils/telemetry-types.js.map +1 -0
  178. package/dist/{src/utils → utils}/types.d.ts +7 -2
  179. package/dist/{src/utils → utils}/types.js.map +1 -1
  180. package/dist/utils/urls.js.map +1 -0
  181. package/dist/utils/vendor/is-unicorn-supported.js.map +1 -0
  182. package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +2 -0
  183. package/dist/{src/vanilla-js/vanilla-js-wizard-agent.js → vanilla-js/vanilla-js-installer-agent.js} +4 -4
  184. package/dist/vanilla-js/vanilla-js-installer-agent.js.map +1 -0
  185. package/package.json +10 -6
  186. package/dist/src/commands/install-skill.js.map +0 -1
  187. package/dist/src/commands/install.js.map +0 -1
  188. package/dist/src/commands/login.js.map +0 -1
  189. package/dist/src/commands/logout.js.map +0 -1
  190. package/dist/src/dashboard/components/AnimatedLogo.js.map +0 -1
  191. package/dist/src/dashboard/components/CompletionView.js.map +0 -1
  192. package/dist/src/dashboard/components/ConfirmPrompt.js.map +0 -1
  193. package/dist/src/dashboard/components/CredentialsForm.js.map +0 -1
  194. package/dist/src/dashboard/components/Dashboard.js.map +0 -1
  195. package/dist/src/dashboard/components/DashboardLayout.js.map +0 -1
  196. package/dist/src/dashboard/components/DiffPanel.js.map +0 -1
  197. package/dist/src/dashboard/components/InlinePrompt.js.map +0 -1
  198. package/dist/src/dashboard/components/OutputPanel.js.map +0 -1
  199. package/dist/src/dashboard/components/Panel.js.map +0 -1
  200. package/dist/src/dashboard/components/TextInput.js.map +0 -1
  201. package/dist/src/dashboard/components/WelcomeArt.js.map +0 -1
  202. package/dist/src/dashboard/hooks/useAnimation.js.map +0 -1
  203. package/dist/src/dashboard/hooks/useKeyboard.js.map +0 -1
  204. package/dist/src/dashboard/hooks/useTerminalSize.js.map +0 -1
  205. package/dist/src/dashboard/index.js.map +0 -1
  206. package/dist/src/dashboard/lib/diff-utils.js.map +0 -1
  207. package/dist/src/dashboard/lib/logo-frames.js.map +0 -1
  208. package/dist/src/dashboard/lib/welcome-art.js.map +0 -1
  209. package/dist/src/dashboard/types.d.ts +0 -5
  210. package/dist/src/dashboard/types.js.map +0 -1
  211. package/dist/src/lib/__tests__/test-utils.d.ts +0 -40
  212. package/dist/src/lib/__tests__/test-utils.js +0 -108
  213. package/dist/src/lib/__tests__/test-utils.js.map +0 -1
  214. package/dist/src/lib/adapters/cli-adapter.js.map +0 -1
  215. package/dist/src/lib/adapters/dashboard-adapter.js.map +0 -1
  216. package/dist/src/lib/adapters/index.js.map +0 -1
  217. package/dist/src/lib/adapters/types.js.map +0 -1
  218. package/dist/src/lib/agent-interface.js.map +0 -1
  219. package/dist/src/lib/agent-runner.js.map +0 -1
  220. package/dist/src/lib/ai-content.js +0 -68
  221. package/dist/src/lib/ai-content.js.map +0 -1
  222. package/dist/src/lib/api.js.map +0 -1
  223. package/dist/src/lib/config.js.map +0 -1
  224. package/dist/src/lib/constants.js.map +0 -1
  225. package/dist/src/lib/credential-discovery.js.map +0 -1
  226. package/dist/src/lib/credentials.js.map +0 -1
  227. package/dist/src/lib/device-auth.js.map +0 -1
  228. package/dist/src/lib/env-writer.js.map +0 -1
  229. package/dist/src/lib/framework-config.js.map +0 -1
  230. package/dist/src/lib/helper-functions.js.map +0 -1
  231. package/dist/src/lib/port-detection.js.map +0 -1
  232. package/dist/src/lib/post-install.js.map +0 -1
  233. package/dist/src/lib/progress-tracker.js.map +0 -1
  234. package/dist/src/lib/run-with-core.d.ts +0 -2
  235. package/dist/src/lib/run-with-core.js.map +0 -1
  236. package/dist/src/lib/safe-tools.js.map +0 -1
  237. package/dist/src/lib/settings.js.map +0 -1
  238. package/dist/src/lib/staging-api.js.map +0 -1
  239. package/dist/src/lib/token-refresh.js.map +0 -1
  240. package/dist/src/lib/validation/build-validator.js.map +0 -1
  241. package/dist/src/lib/validation/index.js.map +0 -1
  242. package/dist/src/lib/validation/types.js.map +0 -1
  243. package/dist/src/lib/validation/validator.js.map +0 -1
  244. package/dist/src/lib/wizard-core.js.map +0 -1
  245. package/dist/src/lib/wizard-core.types.js +0 -2
  246. package/dist/src/lib/wizard-core.types.js.map +0 -1
  247. package/dist/src/lib/workos-management.js.map +0 -1
  248. package/dist/src/nextjs/nextjs-wizard-agent.d.ts +0 -6
  249. package/dist/src/nextjs/nextjs-wizard-agent.js.map +0 -1
  250. package/dist/src/nextjs/utils.js.map +0 -1
  251. package/dist/src/react/react-wizard-agent.d.ts +0 -2
  252. package/dist/src/react/react-wizard-agent.js.map +0 -1
  253. package/dist/src/react-router/react-router-wizard-agent.d.ts +0 -6
  254. package/dist/src/react-router/react-router-wizard-agent.js.map +0 -1
  255. package/dist/src/react-router/utils.js.map +0 -1
  256. package/dist/src/run.js.map +0 -1
  257. package/dist/src/steps/add-or-update-environment-variables.js.map +0 -1
  258. package/dist/src/steps/index.js.map +0 -1
  259. package/dist/src/steps/run-prettier.js.map +0 -1
  260. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
  261. package/dist/src/steps/upload-environment-variables/index.js.map +0 -1
  262. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +0 -1
  263. package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +0 -2
  264. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +0 -1
  265. package/dist/src/telemetry.js.map +0 -1
  266. package/dist/src/utils/analytics.js.map +0 -1
  267. package/dist/src/utils/bash.js.map +0 -1
  268. package/dist/src/utils/clack-utils.js.map +0 -1
  269. package/dist/src/utils/clack.js.map +0 -1
  270. package/dist/src/utils/cli-symbols.js.map +0 -1
  271. package/dist/src/utils/debug.js.map +0 -1
  272. package/dist/src/utils/env-parser.js.map +0 -1
  273. package/dist/src/utils/environment.d.ts +0 -4
  274. package/dist/src/utils/environment.js.map +0 -1
  275. package/dist/src/utils/errors.js.map +0 -1
  276. package/dist/src/utils/git-utils.js.map +0 -1
  277. package/dist/src/utils/logging.js.map +0 -1
  278. package/dist/src/utils/package-json.js.map +0 -1
  279. package/dist/src/utils/package-manager.js.map +0 -1
  280. package/dist/src/utils/redact.js.map +0 -1
  281. package/dist/src/utils/semver.js.map +0 -1
  282. package/dist/src/utils/string.js.map +0 -1
  283. package/dist/src/utils/telemetry-client.js.map +0 -1
  284. package/dist/src/utils/telemetry-types.js +0 -6
  285. package/dist/src/utils/telemetry-types.js.map +0 -1
  286. package/dist/src/utils/urls.js.map +0 -1
  287. package/dist/src/utils/vendor/is-unicorn-supported.js.map +0 -1
  288. package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +0 -2
  289. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +0 -1
  290. /package/dist/{src/commands → commands}/install-skill.d.ts +0 -0
  291. /package/dist/{src/commands → commands}/install-skill.js +0 -0
  292. /package/dist/{src/commands → commands}/install.d.ts +0 -0
  293. /package/dist/{src/commands → commands}/login.d.ts +0 -0
  294. /package/dist/{src/commands → commands}/logout.d.ts +0 -0
  295. /package/dist/{src/commands → commands}/logout.js +0 -0
  296. /package/dist/{src/dashboard → dashboard}/components/AnimatedLogo.d.ts +0 -0
  297. /package/dist/{src/dashboard → dashboard}/components/AnimatedLogo.js +0 -0
  298. /package/dist/{src/dashboard → dashboard}/components/CompletionView.d.ts +0 -0
  299. /package/dist/{src/dashboard → dashboard}/components/CompletionView.js +0 -0
  300. /package/dist/{src/dashboard → dashboard}/components/ConfirmPrompt.d.ts +0 -0
  301. /package/dist/{src/dashboard → dashboard}/components/ConfirmPrompt.js +0 -0
  302. /package/dist/{src/dashboard → dashboard}/components/CredentialsForm.d.ts +0 -0
  303. /package/dist/{src/dashboard → dashboard}/components/CredentialsForm.js +0 -0
  304. /package/dist/{src/dashboard → dashboard}/components/Dashboard.d.ts +0 -0
  305. /package/dist/{src/dashboard → dashboard}/components/Dashboard.js +0 -0
  306. /package/dist/{src/dashboard → dashboard}/components/DashboardLayout.js +0 -0
  307. /package/dist/{src/dashboard → dashboard}/components/DiffPanel.js +0 -0
  308. /package/dist/{src/dashboard → dashboard}/components/InlinePrompt.d.ts +0 -0
  309. /package/dist/{src/dashboard → dashboard}/components/InlinePrompt.js +0 -0
  310. /package/dist/{src/dashboard → dashboard}/components/OutputPanel.js +0 -0
  311. /package/dist/{src/dashboard → dashboard}/components/Panel.d.ts +0 -0
  312. /package/dist/{src/dashboard → dashboard}/components/Panel.js +0 -0
  313. /package/dist/{src/dashboard → dashboard}/components/TextInput.d.ts +0 -0
  314. /package/dist/{src/dashboard → dashboard}/components/TextInput.js +0 -0
  315. /package/dist/{src/dashboard → dashboard}/components/WelcomeArt.d.ts +0 -0
  316. /package/dist/{src/dashboard → dashboard}/components/WelcomeArt.js +0 -0
  317. /package/dist/{src/dashboard → dashboard}/hooks/useAnimation.d.ts +0 -0
  318. /package/dist/{src/dashboard → dashboard}/hooks/useAnimation.js +0 -0
  319. /package/dist/{src/dashboard → dashboard}/hooks/useKeyboard.d.ts +0 -0
  320. /package/dist/{src/dashboard → dashboard}/hooks/useKeyboard.js +0 -0
  321. /package/dist/{src/dashboard → dashboard}/hooks/useTerminalSize.d.ts +0 -0
  322. /package/dist/{src/dashboard → dashboard}/hooks/useTerminalSize.js +0 -0
  323. /package/dist/{src/dashboard → dashboard}/index.js +0 -0
  324. /package/dist/{src/dashboard → dashboard}/lib/diff-utils.d.ts +0 -0
  325. /package/dist/{src/dashboard → dashboard}/lib/diff-utils.js +0 -0
  326. /package/dist/{src/dashboard → dashboard}/lib/logo-frames.d.ts +0 -0
  327. /package/dist/{src/dashboard → dashboard}/lib/logo-frames.js +0 -0
  328. /package/dist/{src/dashboard → dashboard}/lib/welcome-art.d.ts +0 -0
  329. /package/dist/{src/dashboard → dashboard}/lib/welcome-art.js +0 -0
  330. /package/dist/{src/dashboard → dashboard}/types.js +0 -0
  331. /package/dist/{src/lib → lib}/adapters/dashboard-adapter.js +0 -0
  332. /package/dist/{src/lib → lib}/adapters/index.js +0 -0
  333. /package/dist/{src/lib → lib}/adapters/types.js +0 -0
  334. /package/dist/{src/lib → lib}/api.d.ts +0 -0
  335. /package/dist/{src/lib → lib}/api.js +0 -0
  336. /package/dist/{src/lib → lib}/config.js +0 -0
  337. /package/dist/{src/lib → lib}/credential-discovery.d.ts +0 -0
  338. /package/dist/{src/lib → lib}/credential-discovery.js +0 -0
  339. /package/dist/{src/lib → lib}/env-writer.d.ts +0 -0
  340. /package/dist/{src/lib → lib}/env-writer.js +0 -0
  341. /package/dist/{src/lib → lib}/helper-functions.d.ts +0 -0
  342. /package/dist/{src/lib → lib}/helper-functions.js +0 -0
  343. /package/dist/{src/lib → lib}/port-detection.d.ts +0 -0
  344. /package/dist/{src/lib → lib}/port-detection.js +0 -0
  345. /package/dist/{src/lib → lib}/post-install.d.ts +0 -0
  346. /package/dist/{src/lib → lib}/post-install.js +0 -0
  347. /package/dist/{src/lib → lib}/progress-tracker.d.ts +0 -0
  348. /package/dist/{src/lib → lib}/progress-tracker.js +0 -0
  349. /package/dist/{src/lib → lib}/safe-tools.d.ts +0 -0
  350. /package/dist/{src/lib → lib}/safe-tools.js +0 -0
  351. /package/dist/{src/lib → lib}/staging-api.d.ts +0 -0
  352. /package/dist/{src/lib → lib}/staging-api.js +0 -0
  353. /package/dist/{src/lib → lib}/token-refresh.d.ts +0 -0
  354. /package/dist/{src/lib → lib}/validation/build-validator.d.ts +0 -0
  355. /package/dist/{src/lib → lib}/validation/build-validator.js +0 -0
  356. /package/dist/{src/lib → lib}/validation/index.d.ts +0 -0
  357. /package/dist/{src/lib → lib}/validation/index.js +0 -0
  358. /package/dist/{src/lib → lib}/validation/types.d.ts +0 -0
  359. /package/dist/{src/lib → lib}/validation/types.js +0 -0
  360. /package/dist/{src/lib → lib}/validation/validator.d.ts +0 -0
  361. /package/dist/{src/lib → lib}/validation/validator.js +0 -0
  362. /package/dist/{src/lib → lib}/workos-management.d.ts +0 -0
  363. /package/dist/{src/nextjs → nextjs}/utils.js +0 -0
  364. /package/dist/{src/react-router → react-router}/utils.js +0 -0
  365. /package/dist/{src/steps → steps}/add-or-update-environment-variables.d.ts +0 -0
  366. /package/dist/{src/steps → steps}/index.d.ts +0 -0
  367. /package/dist/{src/steps → steps}/index.js +0 -0
  368. /package/dist/{src/steps → steps}/upload-environment-variables/EnvironmentProvider.js +0 -0
  369. /package/dist/{src/steps → steps}/upload-environment-variables/providers/vercel.js +0 -0
  370. /package/dist/{src/telemetry.d.ts → telemetry.d.ts} +0 -0
  371. /package/dist/{src/telemetry.js → telemetry.js} +0 -0
  372. /package/dist/{src/utils → utils}/analytics.d.ts +0 -0
  373. /package/dist/{src/utils → utils}/bash.d.ts +0 -0
  374. /package/dist/{src/utils → utils}/bash.js +0 -0
  375. /package/dist/{src/utils → utils}/clack.d.ts +0 -0
  376. /package/dist/{src/utils → utils}/clack.js +0 -0
  377. /package/dist/{src/utils → utils}/cli-symbols.d.ts +0 -0
  378. /package/dist/{src/utils → utils}/cli-symbols.js +0 -0
  379. /package/dist/{src/utils → utils}/debug.d.ts +0 -0
  380. /package/dist/{src/utils → utils}/env-parser.d.ts +0 -0
  381. /package/dist/{src/utils → utils}/env-parser.js +0 -0
  382. /package/dist/{src/utils → utils}/errors.d.ts +0 -0
  383. /package/dist/{src/utils → utils}/git-utils.d.ts +0 -0
  384. /package/dist/{src/utils → utils}/git-utils.js +0 -0
  385. /package/dist/{src/utils → utils}/logging.d.ts +0 -0
  386. /package/dist/{src/utils → utils}/logging.js +0 -0
  387. /package/dist/{src/utils → utils}/package-json.d.ts +0 -0
  388. /package/dist/{src/utils → utils}/package-json.js +0 -0
  389. /package/dist/{src/utils → utils}/package-manager.js +0 -0
  390. /package/dist/{src/utils → utils}/redact.d.ts +0 -0
  391. /package/dist/{src/utils → utils}/redact.js +0 -0
  392. /package/dist/{src/utils → utils}/semver.d.ts +0 -0
  393. /package/dist/{src/utils → utils}/semver.js +0 -0
  394. /package/dist/{src/utils → utils}/string.d.ts +0 -0
  395. /package/dist/{src/utils → utils}/string.js +0 -0
  396. /package/dist/{src/utils → utils}/telemetry-client.d.ts +0 -0
  397. /package/dist/{src/utils → utils}/types.js +0 -0
  398. /package/dist/{src/utils → utils}/urls.d.ts +0 -0
  399. /package/dist/{src/utils → utils}/urls.js +0 -0
  400. /package/dist/{src/utils → utils}/vendor/is-unicorn-supported.d.ts +0 -0
  401. /package/dist/{src/utils → utils}/vendor/is-unicorn-supported.js +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "workos-authkit-wizard",
2
+ "name": "workos-authkit-installer",
3
3
  "version": "1.0.0",
4
4
  "description": "WorkOS AuthKit integration skills for multiple frameworks",
5
5
  "author": {
@@ -7,7 +7,7 @@
7
7
  "url": "https://workos.com"
8
8
  },
9
9
  "homepage": "https://workos.com/docs/user-management/authkit",
10
- "repository": "https://github.com/workos/authkit-wizard",
10
+ "repository": "https://github.com/workos/authkit-installer",
11
11
  "license": "MIT",
12
- "keywords": ["workos", "authkit", "authentication", "wizard"]
12
+ "keywords": ["workos", "authkit", "authentication", "installer", "install"]
13
13
  }
package/README.md CHANGED
@@ -24,7 +24,7 @@ workos
24
24
 
25
25
  ## What It Creates
26
26
 
27
- Depending on your framework, the wizard creates:
27
+ Depending on your framework, the installer creates:
28
28
 
29
29
  - ✅ Authentication routes (callback, sign-in, sign-out)
30
30
  - ✅ Middleware for route protection
@@ -57,6 +57,7 @@ Commands:
57
57
  --agent, -a Target agent(s): claude-code, codex, cursor, goose
58
58
 
59
59
  Options:
60
+ --direct, -D Use your own Anthropic API key (bypass llm-gateway)
60
61
  --integration <name> Framework: nextjs, react, react-router, tanstack-start, vanilla-js
61
62
  --redirect-uri <uri> Custom redirect URI (defaults to framework convention)
62
63
  --homepage-url <url> Custom homepage URL (defaults to http://localhost:{port})
@@ -109,7 +110,7 @@ Credentials are stored in `~/.workos/credentials.json`. Access tokens are not pe
109
110
 
110
111
  ## Telemetry
111
112
 
112
- The wizard collects anonymous usage telemetry to help improve the product:
113
+ The installer collects anonymous usage telemetry to help improve the product:
113
114
 
114
115
  - Session outcome (success/error/cancelled)
115
116
  - Framework detected
package/dist/bin.js CHANGED
@@ -1,26 +1,46 @@
1
1
  #!/usr/bin/env node
2
2
  // Load .env.local for local development when --local flag is used
3
- if (process.argv.includes('--local') || process.env.WIZARD_DEV) {
3
+ if (process.argv.includes('--local') || process.env.INSTALLER_DEV) {
4
4
  const { config } = await import('dotenv');
5
5
  // bin.ts compiles to dist/bin.js, so go up one level to find .env.local
6
6
  config({ path: new URL('../.env.local', import.meta.url).pathname });
7
7
  }
8
8
  import { satisfies } from 'semver';
9
- import { red } from './src/utils/logging.js';
10
- import { getConfig } from './src/lib/settings.js';
9
+ import { red } from './utils/logging.js';
10
+ import { getConfig } from './lib/settings.js';
11
11
  import yargs from 'yargs';
12
12
  import { hideBin } from 'yargs/helpers';
13
+ import { ensureAuthenticated } from './lib/ensure-auth.js';
13
14
  const NODE_VERSION_RANGE = getConfig().nodeVersion;
14
15
  // Have to run this above the other imports because they are importing clack that
15
16
  // has the problematic imports.
16
17
  if (!satisfies(process.version, NODE_VERSION_RANGE)) {
17
- red(`WorkOS AuthKit wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`);
18
+ red(`WorkOS AuthKit installer requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`);
18
19
  process.exit(1);
19
20
  }
20
- import { isNonInteractiveEnvironment } from './src/utils/environment.js';
21
- import clack from './src/utils/clack.js';
21
+ import { isNonInteractiveEnvironment } from './utils/environment.js';
22
+ import clack from './utils/clack.js';
22
23
  // Shared options for wizard commands (default and dashboard)
23
- const wizardOptions = {
24
+ /**
25
+ * Wrap a command handler with authentication check.
26
+ * Ensures valid auth before executing the handler.
27
+ * Respects --skip-auth flag for CI/testing.
28
+ */
29
+ function withAuth(handler) {
30
+ return async (argv) => {
31
+ if (!argv.skipAuth) {
32
+ await ensureAuthenticated();
33
+ }
34
+ await handler(argv);
35
+ };
36
+ }
37
+ const installerOptions = {
38
+ direct: {
39
+ alias: 'D',
40
+ default: false,
41
+ describe: 'Use your own Anthropic API key (bypass llm-gateway)',
42
+ type: 'boolean',
43
+ },
24
44
  debug: {
25
45
  default: false,
26
46
  describe: 'Enable verbose logging',
@@ -91,14 +111,14 @@ const wizardOptions = {
91
111
  },
92
112
  };
93
113
  yargs(hideBin(process.argv))
94
- .env('WORKOS_WIZARD')
114
+ .env('WORKOS_INSTALLER')
95
115
  .command('login', 'Authenticate with WorkOS', {}, async () => {
96
- const { runLogin } = await import('./src/commands/login.js');
116
+ const { runLogin } = await import('./commands/login.js');
97
117
  await runLogin();
98
118
  process.exit(0);
99
119
  })
100
120
  .command('logout', 'Remove stored credentials', {}, async () => {
101
- const { runLogout } = await import('./src/commands/logout.js');
121
+ const { runLogout } = await import('./commands/logout.js');
102
122
  await runLogout();
103
123
  })
104
124
  .command('install-skill', 'Install bundled AuthKit skills to coding agents', (yargs) => {
@@ -120,23 +140,23 @@ yargs(hideBin(process.argv))
120
140
  string: true,
121
141
  description: 'Target specific agent(s): claude-code, codex, cursor, goose',
122
142
  });
123
- }, async (argv) => {
124
- const { runInstallSkill } = await import('./src/commands/install-skill.js');
143
+ }, withAuth(async (argv) => {
144
+ const { runInstallSkill } = await import('./commands/install-skill.js');
125
145
  await runInstallSkill({
126
146
  list: argv.list,
127
147
  skill: argv.skill,
128
148
  agent: argv.agent,
129
149
  });
130
- })
131
- .command('install', 'Install WorkOS AuthKit into your project', (yargs) => yargs.options(wizardOptions), async (argv) => {
132
- const { handleInstall } = await import('./src/commands/install.js');
150
+ }))
151
+ .command('install', 'Install WorkOS AuthKit into your project', (yargs) => yargs.options(installerOptions), withAuth(async (argv) => {
152
+ const { handleInstall } = await import('./commands/install.js');
133
153
  await handleInstall(argv);
134
- })
154
+ }))
135
155
  .command('dashboard', false, // hidden from help
136
- (yargs) => yargs.options(wizardOptions), async (argv) => {
137
- const { handleInstall } = await import('./src/commands/install.js');
156
+ (yargs) => yargs.options(installerOptions), withAuth(async (argv) => {
157
+ const { handleInstall } = await import('./commands/install.js');
138
158
  await handleInstall({ ...argv, dashboard: true });
139
- })
159
+ }))
140
160
  .command(['$0'], 'WorkOS AuthKit CLI', (yargs) => yargs, async () => {
141
161
  // Non-TTY: show help
142
162
  if (isNonInteractiveEnvironment()) {
@@ -150,7 +170,9 @@ yargs(hideBin(process.argv))
150
170
  if (clack.isCancel(shouldInstall) || !shouldInstall) {
151
171
  process.exit(0);
152
172
  }
153
- const { handleInstall } = await import('./src/commands/install.js');
173
+ // Auth check happens HERE, after user confirms
174
+ await ensureAuthenticated();
175
+ const { handleInstall } = await import('./commands/install.js');
154
176
  await handleInstall({ dashboard: false });
155
177
  process.exit(0);
156
178
  })
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../bin.ts"],"names":[],"mappings":";AAEA,kEAAkE;AAClE,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;IAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,wEAAwE;IACxE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,kBAAkB,GAAG,SAAS,EAAE,CAAC,WAAW,CAAC;AAEnD,iFAAiF;AACjF,+BAA+B;AAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC;IACpD,GAAG,CACD,0CAA0C,kBAAkB,2BAA2B,OAAO,CAAC,OAAO,wCAAwC,CAC/I,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,MAAM,sBAAsB,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,wBAAwB;QAClC,IAAI,EAAE,SAAkB;KACzB;IACD,6CAA6C;IAC7C,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,SAAkB;QACxB,MAAM,EAAE,IAAI;KACb;IACD,EAAE,EAAE;QACF,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,SAAkB;QACxB,MAAM,EAAE,IAAI;KACb;IACD,WAAW,EAAE;QACX,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,SAAkB;QACxB,MAAM,EAAE,IAAI;KACb;IACD,SAAS,EAAE;QACT,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,IAAI;KACb;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,MAAM,EAAE,IAAI;KACb;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,SAAkB;QACxB,MAAM,EAAE,IAAI;KACb;IACD,oBAAoB;IACpB,cAAc,EAAE;QACd,QAAQ,EAAE,mEAAmE;QAC7E,IAAI,EAAE,QAAiB;KACxB;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,qEAAqE;QAC/E,IAAI,EAAE,QAAiB;KACxB;IACD,aAAa,EAAE;QACb,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,0DAA0D;QACpE,IAAI,EAAE,SAAkB;KACzB;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,wCAAwC;QAClD,IAAI,EAAE,QAAiB;KACxB;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,uBAAuB;QACjC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,CAAU;QACrF,IAAI,EAAE,QAAiB;KACxB;IACD,eAAe,EAAE;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,4DAA4D;QACtE,IAAI,EAAE,SAAkB;KACzB;IACD,SAAS,EAAE;QACT,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,gCAAgC;QAC1C,IAAI,EAAE,SAAkB;KACzB;CACF,CAAC;AAEF,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,GAAG,CAAC,eAAe,CAAC;KACpB,OAAO,CAAC,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC7D,MAAM,QAAQ,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;KACD,OAAO,CAAC,QAAQ,EAAE,2BAA2B,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;IAC7D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC/D,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC,CAAC;KACD,OAAO,CACN,eAAe,EACf,iDAAiD,EACjD,CAAC,KAAK,EAAE,EAAE;IACR,OAAO,KAAK;SACT,MAAM,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,0CAA0C;KACxD,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,2BAA2B;KACzC,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,6DAA6D;KAC3E,CAAC,CAAC;AACP,CAAC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAC5E,MAAM,eAAe,CAAC;QACpB,IAAI,EAAE,IAAI,CAAC,IAA2B;QACtC,KAAK,EAAE,IAAI,CAAC,KAA6B;QACzC,KAAK,EAAE,IAAI,CAAC,KAA6B;KAC1C,CAAC,CAAC;AACL,CAAC,CACF;KACA,OAAO,CACN,SAAS,EACT,0CAA0C,EAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EACvC,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACpE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CACF;KACA,OAAO,CACN,WAAW,EACX,KAAK,EAAE,mBAAmB;AAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EACvC,KAAK,EAAE,IAAI,EAAE,EAAE;IACb,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACpE,MAAM,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CACF;KACA,OAAO,CACN,CAAC,IAAI,CAAC,EACN,oBAAoB,EACpB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAChB,KAAK,IAAI,EAAE;IACT,qBAAqB;IACrB,IAAI,2BAA2B,EAAE,EAAE,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,0CAA0C;IAC1C,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QACxC,OAAO,EAAE,4BAA4B;KACtC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACpE,MAAM,aAAa,CAAC,EAAE,SAAS,EAAE,KAAK,EAAS,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CACF;KACA,MAAM,EAAE;KACR,IAAI,EAAE;KACN,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;KAClB,OAAO,EAAE;KACT,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;KACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC","sourcesContent":["#!/usr/bin/env node\n\n// Load .env.local for local development when --local flag is used\nif (process.argv.includes('--local') || process.env.WIZARD_DEV) {\n const { config } = await import('dotenv');\n // bin.ts compiles to dist/bin.js, so go up one level to find .env.local\n config({ path: new URL('../.env.local', import.meta.url).pathname });\n}\n\nimport { satisfies } from 'semver';\nimport { red } from './src/utils/logging.js';\nimport { getConfig } from './src/lib/settings.js';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport chalk from 'chalk';\n\nconst NODE_VERSION_RANGE = getConfig().nodeVersion;\n\n// Have to run this above the other imports because they are importing clack that\n// has the problematic imports.\nif (!satisfies(process.version, NODE_VERSION_RANGE)) {\n red(\n `WorkOS AuthKit wizard requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`,\n );\n process.exit(1);\n}\n\nimport { isNonInteractiveEnvironment } from './src/utils/environment.js';\nimport clack from './src/utils/clack.js';\n\n// Shared options for wizard commands (default and dashboard)\nconst wizardOptions = {\n debug: {\n default: false,\n describe: 'Enable verbose logging',\n type: 'boolean' as const,\n },\n // Hidden dev/automation flags (use env vars)\n local: {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n ci: {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n 'skip-auth': {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n 'api-key': {\n type: 'string' as const,\n hidden: true,\n },\n 'client-id': {\n type: 'string' as const,\n hidden: true,\n },\n inspect: {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n // User-facing flags\n 'homepage-url': {\n describe: 'App homepage URL for WorkOS (defaults to http://localhost:{port})',\n type: 'string' as const,\n },\n 'redirect-uri': {\n describe: 'Redirect URI for WorkOS callback (defaults to framework convention)',\n type: 'string' as const,\n },\n 'no-validate': {\n default: false,\n describe: 'Skip post-installation validation (includes build check)',\n type: 'boolean' as const,\n },\n 'install-dir': {\n describe: 'Directory to install WorkOS AuthKit in',\n type: 'string' as const,\n },\n integration: {\n describe: 'Integration to set up',\n choices: ['nextjs', 'react', 'tanstack-start', 'react-router', 'vanilla-js'] as const,\n type: 'string' as const,\n },\n 'force-install': {\n default: false,\n describe: 'Force install packages even if peer dependency checks fail',\n type: 'boolean' as const,\n },\n dashboard: {\n alias: 'd',\n default: false,\n describe: 'Run with visual dashboard mode',\n type: 'boolean' as const,\n },\n};\n\nyargs(hideBin(process.argv))\n .env('WORKOS_WIZARD')\n .command('login', 'Authenticate with WorkOS', {}, async () => {\n const { runLogin } = await import('./src/commands/login.js');\n await runLogin();\n process.exit(0);\n })\n .command('logout', 'Remove stored credentials', {}, async () => {\n const { runLogout } = await import('./src/commands/logout.js');\n await runLogout();\n })\n .command(\n 'install-skill',\n 'Install bundled AuthKit skills to coding agents',\n (yargs) => {\n return yargs\n .option('list', {\n alias: 'l',\n type: 'boolean',\n description: 'List available skills without installing',\n })\n .option('skill', {\n alias: 's',\n type: 'array',\n string: true,\n description: 'Install specific skill(s)',\n })\n .option('agent', {\n alias: 'a',\n type: 'array',\n string: true,\n description: 'Target specific agent(s): claude-code, codex, cursor, goose',\n });\n },\n async (argv) => {\n const { runInstallSkill } = await import('./src/commands/install-skill.js');\n await runInstallSkill({\n list: argv.list as boolean | undefined,\n skill: argv.skill as string[] | undefined,\n agent: argv.agent as string[] | undefined,\n });\n },\n )\n .command(\n 'install',\n 'Install WorkOS AuthKit into your project',\n (yargs) => yargs.options(wizardOptions),\n async (argv) => {\n const { handleInstall } = await import('./src/commands/install.js');\n await handleInstall(argv);\n },\n )\n .command(\n 'dashboard',\n false, // hidden from help\n (yargs) => yargs.options(wizardOptions),\n async (argv) => {\n const { handleInstall } = await import('./src/commands/install.js');\n await handleInstall({ ...argv, dashboard: true });\n },\n )\n .command(\n ['$0'],\n 'WorkOS AuthKit CLI',\n (yargs) => yargs,\n async () => {\n // Non-TTY: show help\n if (isNonInteractiveEnvironment()) {\n yargs(hideBin(process.argv)).showHelp();\n return;\n }\n\n // TTY: ask if user wants to run installer\n const shouldInstall = await clack.confirm({\n message: 'Run the AuthKit installer?',\n });\n\n if (clack.isCancel(shouldInstall) || !shouldInstall) {\n process.exit(0);\n }\n\n const { handleInstall } = await import('./src/commands/install.js');\n await handleInstall({ dashboard: false } as any);\n process.exit(0);\n },\n )\n .strict()\n .help()\n .alias('help', 'h')\n .version()\n .alias('version', 'v')\n .wrap(process.stdout.isTTY && process.stdout.columns ? process.stdout.columns : 80).argv;\n"]}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n// Load .env.local for local development when --local flag is used\nif (process.argv.includes('--local') || process.env.INSTALLER_DEV) {\n const { config } = await import('dotenv');\n // bin.ts compiles to dist/bin.js, so go up one level to find .env.local\n config({ path: new URL('../.env.local', import.meta.url).pathname });\n}\n\nimport { satisfies } from 'semver';\nimport { red } from './utils/logging.js';\nimport { getConfig } from './lib/settings.js';\n\nimport yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport chalk from 'chalk';\nimport { ensureAuthenticated } from './lib/ensure-auth.js';\n\nconst NODE_VERSION_RANGE = getConfig().nodeVersion;\n\n// Have to run this above the other imports because they are importing clack that\n// has the problematic imports.\nif (!satisfies(process.version, NODE_VERSION_RANGE)) {\n red(\n `WorkOS AuthKit installer requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`,\n );\n process.exit(1);\n}\n\nimport { isNonInteractiveEnvironment } from './utils/environment.js';\nimport clack from './utils/clack.js';\n\n// Shared options for wizard commands (default and dashboard)\n/**\n * Wrap a command handler with authentication check.\n * Ensures valid auth before executing the handler.\n * Respects --skip-auth flag for CI/testing.\n */\nfunction withAuth<T>(handler: (argv: T) => Promise<void>): (argv: T) => Promise<void> {\n return async (argv: T) => {\n if (!(argv as { skipAuth?: boolean }).skipAuth) {\n await ensureAuthenticated();\n }\n await handler(argv);\n };\n}\n\nconst installerOptions = {\n direct: {\n alias: 'D',\n default: false,\n describe: 'Use your own Anthropic API key (bypass llm-gateway)',\n type: 'boolean' as const,\n },\n debug: {\n default: false,\n describe: 'Enable verbose logging',\n type: 'boolean' as const,\n },\n // Hidden dev/automation flags (use env vars)\n local: {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n ci: {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n 'skip-auth': {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n 'api-key': {\n type: 'string' as const,\n hidden: true,\n },\n 'client-id': {\n type: 'string' as const,\n hidden: true,\n },\n inspect: {\n default: false,\n type: 'boolean' as const,\n hidden: true,\n },\n // User-facing flags\n 'homepage-url': {\n describe: 'App homepage URL for WorkOS (defaults to http://localhost:{port})',\n type: 'string' as const,\n },\n 'redirect-uri': {\n describe: 'Redirect URI for WorkOS callback (defaults to framework convention)',\n type: 'string' as const,\n },\n 'no-validate': {\n default: false,\n describe: 'Skip post-installation validation (includes build check)',\n type: 'boolean' as const,\n },\n 'install-dir': {\n describe: 'Directory to install WorkOS AuthKit in',\n type: 'string' as const,\n },\n integration: {\n describe: 'Integration to set up',\n choices: ['nextjs', 'react', 'tanstack-start', 'react-router', 'vanilla-js'] as const,\n type: 'string' as const,\n },\n 'force-install': {\n default: false,\n describe: 'Force install packages even if peer dependency checks fail',\n type: 'boolean' as const,\n },\n dashboard: {\n alias: 'd',\n default: false,\n describe: 'Run with visual dashboard mode',\n type: 'boolean' as const,\n },\n};\n\nyargs(hideBin(process.argv))\n .env('WORKOS_INSTALLER')\n .command('login', 'Authenticate with WorkOS', {}, async () => {\n const { runLogin } = await import('./commands/login.js');\n await runLogin();\n process.exit(0);\n })\n .command('logout', 'Remove stored credentials', {}, async () => {\n const { runLogout } = await import('./commands/logout.js');\n await runLogout();\n })\n .command(\n 'install-skill',\n 'Install bundled AuthKit skills to coding agents',\n (yargs) => {\n return yargs\n .option('list', {\n alias: 'l',\n type: 'boolean',\n description: 'List available skills without installing',\n })\n .option('skill', {\n alias: 's',\n type: 'array',\n string: true,\n description: 'Install specific skill(s)',\n })\n .option('agent', {\n alias: 'a',\n type: 'array',\n string: true,\n description: 'Target specific agent(s): claude-code, codex, cursor, goose',\n });\n },\n withAuth(async (argv) => {\n const { runInstallSkill } = await import('./commands/install-skill.js');\n await runInstallSkill({\n list: argv.list as boolean | undefined,\n skill: argv.skill as string[] | undefined,\n agent: argv.agent as string[] | undefined,\n });\n }),\n )\n .command(\n 'install',\n 'Install WorkOS AuthKit into your project',\n (yargs) => yargs.options(installerOptions),\n withAuth(async (argv) => {\n const { handleInstall } = await import('./commands/install.js');\n await handleInstall(argv);\n }),\n )\n .command(\n 'dashboard',\n false, // hidden from help\n (yargs) => yargs.options(installerOptions),\n withAuth(async (argv) => {\n const { handleInstall } = await import('./commands/install.js');\n await handleInstall({ ...argv, dashboard: true });\n }),\n )\n .command(\n ['$0'],\n 'WorkOS AuthKit CLI',\n (yargs) => yargs,\n async () => {\n // Non-TTY: show help\n if (isNonInteractiveEnvironment()) {\n yargs(hideBin(process.argv)).showHelp();\n return;\n }\n\n // TTY: ask if user wants to run installer\n const shouldInstall = await clack.confirm({\n message: 'Run the AuthKit installer?',\n });\n\n if (clack.isCancel(shouldInstall) || !shouldInstall) {\n process.exit(0);\n }\n\n // Auth check happens HERE, after user confirms\n await ensureAuthenticated();\n\n const { handleInstall } = await import('./commands/install.js');\n await handleInstall({ dashboard: false } as any);\n process.exit(0);\n },\n )\n .strict()\n .help()\n .alias('help', 'h')\n .version()\n .alias('version', 'v')\n .wrap(process.stdout.isTTY && process.stdout.columns ? process.stdout.columns : 80).argv;\n"]}
@@ -1,3 +1,4 @@
1
+ export declare const version: string;
1
2
  export declare const config: {
2
3
  readonly model: "claude-opus-4-5-20251101";
3
4
  readonly workos: {
@@ -7,7 +8,10 @@ export declare const config: {
7
8
  };
8
9
  readonly telemetry: {
9
10
  readonly enabled: true;
10
- readonly eventName: "wizard interaction";
11
+ readonly eventName: "installer interaction";
12
+ };
13
+ readonly proxy: {
14
+ readonly refreshThresholdMs: 60000;
11
15
  };
12
16
  readonly nodeVersion: ">=20.20";
13
17
  readonly logging: {
@@ -46,7 +50,7 @@ export declare const config: {
46
50
  readonly branding: {
47
51
  readonly showAsciiArt: true;
48
52
  readonly useCompact: false;
49
- readonly compactAsciiArt: "⚡ WorkOS AuthKit Wizard";
53
+ readonly compactAsciiArt: "⚡ WorkOS AuthKit Installer";
50
54
  readonly asciiArt: "░██ ░██ ░██ ░██████ ░██████\n░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░██ ░███████ ░██░████ ░██ ░██░██ ░██ ░██\n░██ ░████ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ░████████\n░██░██ ░██░██ ░██ ░██ ░██ ░███████ ░██ ░██ ░██\n░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░███ ░███ ░███████ ░██ ░██ ░██ ░██████ ░██████\n\n\n\n ░███ ░██ ░██ ░██ ░██ ░██ ░██\n ░██░██ ░██ ░██ ░██ ░██ ░██\n ░██ ░██ ░██ ░██ ░████████ ░████████ ░██ ░██ ░██░████████\n░█████████ ░██ ░██ ░██ ░██ ░██ ░███████ ░██ ░██\n░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░█████░██ ░████ ░██ ░██ ░██ ░██ ░██ ░████ ";
51
55
  };
52
56
  };
@@ -1,3 +1,5 @@
1
+ import pkg from '../package.json' with { type: 'json' };
2
+ export const version = pkg.version;
1
3
  export const config = {
2
4
  model: 'claude-opus-4-5-20251101',
3
5
  // Production defaults - override via env vars for local dev
@@ -8,7 +10,11 @@ export const config = {
8
10
  },
9
11
  telemetry: {
10
12
  enabled: true,
11
- eventName: 'wizard interaction',
13
+ eventName: 'installer interaction',
14
+ },
15
+ proxy: {
16
+ // Refresh token when it expires within this window (default: 1 minute)
17
+ refreshThresholdMs: 60_000,
12
18
  },
13
19
  nodeVersion: '>=20.20',
14
20
  logging: {
@@ -47,7 +53,7 @@ export const config = {
47
53
  branding: {
48
54
  showAsciiArt: true,
49
55
  useCompact: false,
50
- compactAsciiArt: `⚡ WorkOS AuthKit Wizard`,
56
+ compactAsciiArt: `⚡ WorkOS AuthKit Installer`,
51
57
  asciiArt: `░██ ░██ ░██ ░██████ ░██████
52
58
  ░██ ░██ ░██ ░██ ░██ ░██ ░██
53
59
  ░██ ░██ ░██ ░███████ ░██░████ ░██ ░██░██ ░██ ░██
@@ -1 +1 @@
1
- {"version":3,"file":"cli.config.js","sourceRoot":"","sources":["../cli.config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,0BAA0B;IAEjC,4DAA4D;IAC5D,MAAM,EAAE;QACN,QAAQ,EAAE,mCAAmC;QAC7C,aAAa,EAAE,2BAA2B;QAC1C,aAAa,EAAE,oCAAoC;KACpD;IAED,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,oBAAoB;KAChC;IAED,WAAW,EAAE,SAAS;IAEtB,OAAO,EAAE;QACP,SAAS,EAAE,KAAK;KACjB;IAED,aAAa,EAAE;QACb,aAAa,EAAE,iCAAiC;QAChD,YAAY,EAAE,8BAA8B;QAC5C,SAAS,EAAE,4CAA4C;KACxD;IAED,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,gBAAgB;SAC/B;QACD,KAAK,EAAE;YACL,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,WAAW;SAC1B;QACD,aAAa,EAAE;YACb,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,oBAAoB;SACnC;QACD,WAAW,EAAE;YACX,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,WAAW;SAC1B;QACD,SAAS,EAAE;YACT,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,WAAW;SAC1B;KACF;IAED,MAAM,EAAE;QACN,SAAS,EAAE,IAAI;KAChB;IAED,QAAQ,EAAE;QACR,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,yBAAyB;QAC1C,QAAQ,EAAE;;;;;;;;;;;;;;;;wEAgB0D;KACrE;CACiC,CAAC","sourcesContent":["import type { InstallerConfig } from './src/lib/settings.js';\n\nexport const config = {\n model: 'claude-opus-4-5-20251101',\n\n // Production defaults - override via env vars for local dev\n workos: {\n clientId: 'client_01KFKHSZWK9ADVJV854PDFQCCR',\n authkitDomain: 'https://signin.workos.com',\n llmGatewayUrl: 'https://api.workos.com/llm-gateway',\n },\n\n telemetry: {\n enabled: true,\n eventName: 'wizard interaction',\n },\n\n nodeVersion: '>=20.20',\n\n logging: {\n debugMode: false,\n },\n\n documentation: {\n workosDocsUrl: 'https://workos.com/docs/authkit',\n dashboardUrl: 'https://dashboard.workos.com',\n issuesUrl: 'https://github.com/workos/installer/issues',\n },\n\n frameworks: {\n nextjs: {\n port: 3000,\n callbackPath: '/auth/callback',\n },\n react: {\n port: 5173,\n callbackPath: '/callback',\n },\n tanstackStart: {\n port: 3000,\n callbackPath: '/api/auth/callback',\n },\n reactRouter: {\n port: 5173,\n callbackPath: '/callback',\n },\n vanillaJs: {\n port: 5173,\n callbackPath: '/callback',\n },\n },\n\n legacy: {\n oauthPort: 8239,\n },\n\n branding: {\n showAsciiArt: true,\n useCompact: false,\n compactAsciiArt: `⚡ WorkOS AuthKit Wizard`,\n asciiArt: `░██ ░██ ░██ ░██████ ░██████\n░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░██ ░███████ ░██░████ ░██ ░██░██ ░██ ░██\n░██ ░████ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ░████████\n░██░██ ░██░██ ░██ ░██ ░██ ░███████ ░██ ░██ ░██\n░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░███ ░███ ░███████ ░██ ░██ ░██ ░██████ ░██████\n\n\n\n ░███ ░██ ░██ ░██ ░██ ░██ ░██\n ░██░██ ░██ ░██ ░██ ░██ ░██\n ░██ ░██ ░██ ░██ ░████████ ░████████ ░██ ░██ ░██░████████\n░█████████ ░██ ░██ ░██ ░██ ░██ ░███████ ░██ ░██\n░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░█████░██ ░████ ░██ ░██ ░██ ░██ ░██ ░████ `,\n },\n} as const satisfies InstallerConfig;\n"]}
1
+ {"version":3,"file":"cli.config.js","sourceRoot":"","sources":["../src/cli.config.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExD,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,0BAA0B;IAEjC,4DAA4D;IAC5D,MAAM,EAAE;QACN,QAAQ,EAAE,mCAAmC;QAC7C,aAAa,EAAE,2BAA2B;QAC1C,aAAa,EAAE,oCAAoC;KACpD;IAED,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,uBAAuB;KACnC;IAED,KAAK,EAAE;QACL,uEAAuE;QACvE,kBAAkB,EAAE,MAAM;KAC3B;IAED,WAAW,EAAE,SAAS;IAEtB,OAAO,EAAE;QACP,SAAS,EAAE,KAAK;KACjB;IAED,aAAa,EAAE;QACb,aAAa,EAAE,iCAAiC;QAChD,YAAY,EAAE,8BAA8B;QAC5C,SAAS,EAAE,4CAA4C;KACxD;IAED,UAAU,EAAE;QACV,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,gBAAgB;SAC/B;QACD,KAAK,EAAE;YACL,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,WAAW;SAC1B;QACD,aAAa,EAAE;YACb,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,oBAAoB;SACnC;QACD,WAAW,EAAE;YACX,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,WAAW;SAC1B;QACD,SAAS,EAAE;YACT,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,WAAW;SAC1B;KACF;IAED,MAAM,EAAE;QACN,SAAS,EAAE,IAAI;KAChB;IAED,QAAQ,EAAE;QACR,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,KAAK;QACjB,eAAe,EAAE,4BAA4B;QAC7C,QAAQ,EAAE;;;;;;;;;;;;;;;;wEAgB0D;KACrE;CACiC,CAAC","sourcesContent":["import type { InstallerConfig } from './lib/settings.js';\nimport pkg from '../package.json' with { type: 'json' };\n\nexport const version = pkg.version;\n\nexport const config = {\n model: 'claude-opus-4-5-20251101',\n\n // Production defaults - override via env vars for local dev\n workos: {\n clientId: 'client_01KFKHSZWK9ADVJV854PDFQCCR',\n authkitDomain: 'https://signin.workos.com',\n llmGatewayUrl: 'https://api.workos.com/llm-gateway',\n },\n\n telemetry: {\n enabled: true,\n eventName: 'installer interaction',\n },\n\n proxy: {\n // Refresh token when it expires within this window (default: 1 minute)\n refreshThresholdMs: 60_000,\n },\n\n nodeVersion: '>=20.20',\n\n logging: {\n debugMode: false,\n },\n\n documentation: {\n workosDocsUrl: 'https://workos.com/docs/authkit',\n dashboardUrl: 'https://dashboard.workos.com',\n issuesUrl: 'https://github.com/workos/installer/issues',\n },\n\n frameworks: {\n nextjs: {\n port: 3000,\n callbackPath: '/auth/callback',\n },\n react: {\n port: 5173,\n callbackPath: '/callback',\n },\n tanstackStart: {\n port: 3000,\n callbackPath: '/api/auth/callback',\n },\n reactRouter: {\n port: 5173,\n callbackPath: '/callback',\n },\n vanillaJs: {\n port: 5173,\n callbackPath: '/callback',\n },\n },\n\n legacy: {\n oauthPort: 8239,\n },\n\n branding: {\n showAsciiArt: true,\n useCompact: false,\n compactAsciiArt: `⚡ WorkOS AuthKit Installer`,\n asciiArt: `░██ ░██ ░██ ░██████ ░██████\n░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░██ ░███████ ░██░████ ░██ ░██░██ ░██ ░██\n░██ ░████ ░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ░████████\n░██░██ ░██░██ ░██ ░██ ░██ ░███████ ░██ ░██ ░██\n░████ ░████ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░███ ░███ ░███████ ░██ ░██ ░██ ░██████ ░██████\n\n\n\n ░███ ░██ ░██ ░██ ░██ ░██ ░██\n ░██░██ ░██ ░██ ░██ ░██ ░██\n ░██ ░██ ░██ ░██ ░████████ ░████████ ░██ ░██ ░██░████████\n░█████████ ░██ ░██ ░██ ░██ ░██ ░███████ ░██ ░██\n░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░██ ░███ ░██ ░██ ░██ ░██ ░██ ░██ ░██\n░██ ░██ ░█████░██ ░████ ░██ ░██ ░██ ░██ ░██ ░████ `,\n },\n} as const satisfies InstallerConfig;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from 'os';\nimport { join, dirname } from 'path';\nimport { existsSync } from 'fs';\nimport { mkdir, copyFile, readdir } from 'fs/promises';\nimport { fileURLToPath } from 'url';\nimport chalk from 'chalk';\n\nexport interface AgentConfig {\n name: string;\n displayName: string;\n globalSkillsDir: string;\n detect: () => boolean;\n}\n\nexport function createAgents(home: string): Record<string, AgentConfig> {\n return {\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n globalSkillsDir: join(home, '.claude/skills'),\n detect: () => existsSync(join(home, '.claude')),\n },\n codex: {\n name: 'codex',\n displayName: 'Codex',\n globalSkillsDir: join(home, '.codex/skills'),\n detect: () => existsSync(join(home, '.codex')),\n },\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n globalSkillsDir: join(home, '.cursor/skills'),\n detect: () => existsSync(join(home, '.cursor')),\n },\n goose: {\n name: 'goose',\n displayName: 'Goose',\n globalSkillsDir: join(home, '.config/goose/skills'),\n detect: () => existsSync(join(home, '.config/goose')),\n },\n };\n}\n\nexport interface InstallSkillOptions {\n list?: boolean;\n skill?: string[];\n agent?: string[];\n}\n\nexport function getSkillsDir(): string {\n const currentFile = fileURLToPath(import.meta.url);\n // From dist/src/commands/install-skill.js -> skills/\n return join(dirname(currentFile), '..', '..', '..', 'skills');\n}\n\nexport async function discoverSkills(skillsDir: string): Promise<string[]> {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n\n return entries.filter((e) => e.isDirectory() && existsSync(join(skillsDir, e.name, 'SKILL.md'))).map((e) => e.name);\n}\n\nexport function detectAgents(agents: Record<string, AgentConfig>, filter?: string[]): AgentConfig[] {\n const detected: AgentConfig[] = [];\n\n for (const [key, config] of Object.entries(agents)) {\n if (filter && !filter.includes(key)) continue;\n if (config.detect()) {\n detected.push(config);\n }\n }\n\n return detected;\n}\n\nexport async function installSkill(\n skillsDir: string,\n skillName: string,\n agent: AgentConfig,\n): Promise<{ success: boolean; error?: string }> {\n const sourceFile = join(skillsDir, skillName, 'SKILL.md');\n const targetDir = join(agent.globalSkillsDir, skillName);\n const targetFile = join(targetDir, 'SKILL.md');\n\n try {\n await mkdir(targetDir, { recursive: true });\n await copyFile(sourceFile, targetFile);\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n}\n\nexport async function runInstallSkill(options: InstallSkillOptions): Promise<void> {\n const home = homedir();\n const agents = createAgents(home);\n const skillsDir = getSkillsDir();\n const skills = await discoverSkills(skillsDir);\n\n if (options.list) {\n console.log(chalk.bold('\\nAvailable Skills:\\n'));\n for (const skill of skills) {\n console.log(` ${chalk.cyan(skill)}`);\n }\n console.log();\n return;\n }\n\n const targetSkills = options.skill ? skills.filter((s) => options.skill!.includes(s)) : skills;\n\n if (targetSkills.length === 0) {\n console.error(chalk.red('No matching skills found.'));\n console.log('Available skills:', skills.join(', '));\n process.exit(1);\n }\n\n const targetAgents = detectAgents(agents, options.agent);\n\n if (targetAgents.length === 0) {\n if (options.agent) {\n console.error(chalk.red('Specified agents not found.'));\n } else {\n console.error(chalk.red('No coding agents detected.'));\n }\n console.log('Supported agents:', Object.keys(agents).join(', '));\n process.exit(1);\n }\n\n console.log(chalk.bold('\\nInstalling skills...\\n'));\n\n const results: Array<{\n skill: string;\n agent: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const skill of targetSkills) {\n for (const agent of targetAgents) {\n const result = await installSkill(skillsDir, skill, agent);\n results.push({\n skill,\n agent: agent.displayName,\n ...result,\n });\n }\n }\n\n const successful = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n if (successful.length > 0) {\n console.log(chalk.green(`✓ Installed ${successful.length} skill(s):\\n`));\n for (const r of successful) {\n console.log(` ${chalk.cyan(r.skill)} → ${chalk.dim(r.agent)}`);\n }\n }\n\n if (failed.length > 0) {\n console.log(chalk.red(`\\n✗ Failed to install ${failed.length}:\\n`));\n for (const r of failed) {\n console.log(` ${r.skill} → ${r.agent}: ${chalk.dim(r.error)}`);\n }\n process.exit(1);\n }\n\n console.log(chalk.green('\\nDone!'));\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { runWizard } from '../run.js';
1
+ import { runInstaller } from '../run.js';
2
2
  import { isNonInteractiveEnvironment } from '../utils/environment.js';
3
3
  import clack from '../utils/clack.js';
4
4
  import chalk from 'chalk';
@@ -10,41 +10,37 @@ export async function handleInstall(argv) {
10
10
  // CI mode validation
11
11
  if (options.ci) {
12
12
  if (!options.apiKey) {
13
- clack.intro(chalk.inverse('WorkOS AuthKit Wizard'));
13
+ clack.intro(chalk.inverse('WorkOS AuthKit Installer'));
14
14
  clack.log.error('CI mode requires --api-key (WorkOS API key sk_xxx)');
15
15
  process.exit(1);
16
16
  }
17
17
  if (!options.clientId) {
18
- clack.intro(chalk.inverse('WorkOS AuthKit Wizard'));
18
+ clack.intro(chalk.inverse('WorkOS AuthKit Installer'));
19
19
  clack.log.error('CI mode requires --client-id (WorkOS Client ID client_xxx)');
20
20
  process.exit(1);
21
21
  }
22
22
  if (!options.installDir) {
23
- clack.intro(chalk.inverse('WorkOS AuthKit Wizard'));
23
+ clack.intro(chalk.inverse('WorkOS AuthKit Installer'));
24
24
  clack.log.error('CI mode requires --install-dir (directory to install WorkOS AuthKit in)');
25
25
  process.exit(1);
26
26
  }
27
27
  }
28
28
  else if (isNonInteractiveEnvironment()) {
29
- clack.intro(chalk.inverse('WorkOS AuthKit Wizard'));
29
+ clack.intro(chalk.inverse('WorkOS AuthKit Installer'));
30
30
  clack.log.error('This installer requires an interactive terminal (TTY) to run.\n' +
31
31
  'It appears you are running in a non-interactive environment.\n' +
32
- 'Please run the wizard in an interactive terminal.\n\n' +
32
+ 'Please run the installer in an interactive terminal.\n\n' +
33
33
  'For CI/CD environments, use --ci mode:\n' +
34
- ' wizard install --ci --api-key sk_xxx --client-id client_xxx');
34
+ ' workos install --ci --api-key sk_xxx --client-id client_xxx');
35
35
  process.exit(1);
36
36
  }
37
37
  try {
38
- await runWizard(options);
38
+ await runInstaller(options);
39
39
  process.exit(0);
40
40
  }
41
41
  catch (err) {
42
42
  const { getLogFilePath } = await import('../utils/debug.js');
43
43
  const logPath = getLogFilePath();
44
- const errorMessage = err instanceof Error ? err.message : String(err);
45
- // Always show the error message
46
- clack.log.error(errorMessage);
47
- // Show stack trace in debug mode
48
44
  if (options.debug && err instanceof Error && err.stack) {
49
45
  console.error(err.stack);
50
46
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAqC;IACvE,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5B,qBAAqB;IACrB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,IAAI,2BAA2B,EAAE,EAAE,CAAC;QACzC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,GAAG,CAAC,KAAK,CACb,iEAAiE;YAC/D,gEAAgE;YAChE,0DAA0D;YAC1D,0CAA0C;YAC1C,+DAA+D,CAClE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,OAAsC,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC","sourcesContent":["import type { InstallerOptions } from '../utils/types.js';\nimport { runInstaller } from '../run.js';\nimport { isNonInteractiveEnvironment } from '../utils/environment.js';\nimport clack from '../utils/clack.js';\nimport chalk from 'chalk';\nimport type { ArgumentsCamelCase } from 'yargs';\n\ninterface InstallArgs {\n debug?: boolean;\n local?: boolean;\n ci?: boolean;\n skipAuth?: boolean;\n apiKey?: string;\n clientId?: string;\n inspect?: boolean;\n homepageUrl?: string;\n redirectUri?: string;\n noValidate?: boolean;\n installDir?: string;\n integration?: string;\n forceInstall?: boolean;\n dashboard?: boolean;\n}\n\n/**\n * Handle install command execution.\n */\nexport async function handleInstall(argv: ArgumentsCamelCase<InstallArgs>): Promise<void> {\n const options = { ...argv };\n\n // CI mode validation\n if (options.ci) {\n if (!options.apiKey) {\n clack.intro(chalk.inverse('WorkOS AuthKit Installer'));\n clack.log.error('CI mode requires --api-key (WorkOS API key sk_xxx)');\n process.exit(1);\n }\n if (!options.clientId) {\n clack.intro(chalk.inverse('WorkOS AuthKit Installer'));\n clack.log.error('CI mode requires --client-id (WorkOS Client ID client_xxx)');\n process.exit(1);\n }\n if (!options.installDir) {\n clack.intro(chalk.inverse('WorkOS AuthKit Installer'));\n clack.log.error('CI mode requires --install-dir (directory to install WorkOS AuthKit in)');\n process.exit(1);\n }\n } else if (isNonInteractiveEnvironment()) {\n clack.intro(chalk.inverse('WorkOS AuthKit Installer'));\n clack.log.error(\n 'This installer requires an interactive terminal (TTY) to run.\\n' +\n 'It appears you are running in a non-interactive environment.\\n' +\n 'Please run the installer in an interactive terminal.\\n\\n' +\n 'For CI/CD environments, use --ci mode:\\n' +\n ' workos install --ci --api-key sk_xxx --client-id client_xxx',\n );\n process.exit(1);\n }\n\n try {\n await runInstaller(options as unknown as InstallerOptions);\n process.exit(0);\n } catch (err) {\n const { getLogFilePath } = await import('../utils/debug.js');\n const logPath = getLogFilePath();\n\n if (options.debug && err instanceof Error && err.stack) {\n console.error(err.stack);\n }\n if (logPath) {\n clack.log.info(`Debug logs: ${logPath}`);\n }\n process.exit(1);\n }\n}\n"]}
@@ -48,7 +48,7 @@ export async function runLogin() {
48
48
  if (getAccessToken()) {
49
49
  const creds = getCredentials();
50
50
  clack.log.info(`Already logged in as ${creds?.email ?? 'unknown'}`);
51
- clack.log.info('Run `wizard logout` to log out');
51
+ clack.log.info('Run `workos logout` to log out');
52
52
  return;
53
53
  }
54
54
  clack.log.step('Starting authentication...');
@@ -60,7 +60,7 @@ export async function runLogin() {
60
60
  },
61
61
  body: new URLSearchParams({
62
62
  client_id: clientId,
63
- scope: 'openid email staging-environment:credentials:read',
63
+ scope: 'openid email staging-environment:credentials:read offline_access',
64
64
  }),
65
65
  });
66
66
  if (!authResponse.ok) {
@@ -113,6 +113,7 @@ export async function runLogin() {
113
113
  expiresAt,
114
114
  userId,
115
115
  email,
116
+ refreshToken: result.refresh_token,
116
117
  });
117
118
  spinner.stop('Authentication successful!');
118
119
  clack.log.success(`Logged in as ${email || userId}`);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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","sourcesContent":["import open from 'opn';\nimport clack from '../utils/clack.js';\nimport { saveCredentials, getCredentials, getAccessToken } from '../lib/credentials.js';\nimport { getCliAuthClientId, getAuthkitDomain } from '../lib/settings.js';\n\n/**\n * Parse JWT payload\n */\nfunction parseJwt(token: string): Record<string, unknown> | null {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return null;\n return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));\n } catch {\n return null;\n }\n}\n\n/**\n * Extract expiry time from JWT token\n */\nfunction getJwtExpiry(token: string): number | null {\n const payload = parseJwt(token);\n if (!payload || typeof payload.exp !== 'number') return null;\n return payload.exp * 1000;\n}\n\nconst POLL_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes\n\n/**\n * Get Connect OAuth endpoints from AuthKit domain\n */\nfunction getConnectEndpoints() {\n const domain = getAuthkitDomain();\n return {\n deviceAuthorization: `${domain}/oauth2/device_authorization`,\n token: `${domain}/oauth2/token`,\n };\n}\n\ninterface DeviceAuthResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: number;\n interval: number;\n}\n\ninterface ConnectTokenResponse {\n access_token: string;\n id_token: string;\n token_type: string;\n expires_in: number;\n refresh_token?: string;\n}\n\ninterface AuthErrorResponse {\n error: string;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function runLogin(): Promise<void> {\n const clientId = getCliAuthClientId();\n\n if (!clientId) {\n clack.log.error('CLI auth not configured. Set WORKOS_CLI_CLIENT_ID environment variable.');\n process.exit(1);\n }\n\n if (getAccessToken()) {\n const creds = getCredentials();\n clack.log.info(`Already logged in as ${creds?.email ?? 'unknown'}`);\n clack.log.info('Run `workos logout` to log out');\n return;\n }\n\n clack.log.step('Starting authentication...');\n\n const endpoints = getConnectEndpoints();\n\n const authResponse = await fetch(endpoints.deviceAuthorization, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n client_id: clientId,\n scope: 'openid email staging-environment:credentials:read offline_access',\n }),\n });\n\n if (!authResponse.ok) {\n clack.log.error(`Failed to start authentication: ${authResponse.status}`);\n process.exit(1);\n }\n\n const deviceAuth = (await authResponse.json()) as DeviceAuthResponse;\n const pollIntervalMs = (deviceAuth.interval || 5) * 1000;\n\n clack.log.info(`\\nOpen this URL in your browser:\\n`);\n console.log(` ${deviceAuth.verification_uri}`);\n console.log(`\\nEnter code: ${deviceAuth.user_code}\\n`);\n\n try {\n open(deviceAuth.verification_uri_complete);\n clack.log.info('Browser opened automatically');\n } catch {\n // User can open manually\n }\n\n const spinner = clack.spinner();\n spinner.start('Waiting for authentication...');\n\n const startTime = Date.now();\n let currentInterval = pollIntervalMs;\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await sleep(currentInterval);\n\n try {\n const tokenResponse = await fetch(endpoints.token, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceAuth.device_code,\n client_id: clientId,\n }),\n });\n\n const data = await tokenResponse.json();\n\n if (tokenResponse.ok) {\n const result = data as ConnectTokenResponse;\n\n // Parse user info from id_token JWT\n const idTokenPayload = parseJwt(result.id_token);\n const userId = (idTokenPayload?.sub as string) || 'unknown';\n const email = (idTokenPayload?.email as string) || undefined;\n\n // Extract actual expiry from access token JWT, fallback to response or 15 min\n const jwtExpiry = getJwtExpiry(result.access_token);\n const expiresAt =\n jwtExpiry ?? (result.expires_in ? Date.now() + result.expires_in * 1000 : Date.now() + 15 * 60 * 1000);\n\n const expiresInSec = Math.round((expiresAt - Date.now()) / 1000);\n\n saveCredentials({\n accessToken: result.access_token,\n expiresAt,\n userId,\n email,\n refreshToken: result.refresh_token,\n });\n\n spinner.stop('Authentication successful!');\n clack.log.success(`Logged in as ${email || userId}`);\n clack.log.info(`Token expires in ${expiresInSec} seconds`);\n return;\n }\n\n const errorData = data as AuthErrorResponse;\n if (errorData.error === 'authorization_pending') continue;\n if (errorData.error === 'slow_down') {\n currentInterval += 5000;\n continue;\n }\n\n spinner.stop('Authentication failed');\n clack.log.error(`Authentication error: ${errorData.error}`);\n process.exit(1);\n } catch {\n continue;\n }\n }\n\n spinner.stop('Authentication timed out');\n clack.log.error('Authentication timed out. Please try again.');\n process.exit(1);\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEzF,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,gBAAgB,EAAE,CAAC;IAEnB,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;QACjB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC","sourcesContent":["import clack from '../utils/clack.js';\nimport { clearCredentials, hasCredentials, getCredentials } from '../lib/credentials.js';\n\nexport async function runLogout(): Promise<void> {\n if (!hasCredentials()) {\n clack.log.info('Not logged in');\n return;\n }\n\n const creds = getCredentials();\n clearCredentials();\n\n if (creds?.email) {\n clack.log.success(`Logged out from ${creds.email}`);\n } else {\n clack.log.success('Logged out successfully');\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -eux
3
+ # Move to the project root
4
+ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
5
+ cd $SCRIPT_DIR/..
6
+ OLD_VERSION="${1}"
7
+ NEW_VERSION="${2}"
8
+ # Do not tag and commit changes made by "npm version"
9
+ export npm_config_git_tag_version=false
10
+ npm version "${NEW_VERSION}"
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedLogo.js","sourceRoot":"","sources":["../../../src/dashboard/components/AnimatedLogo.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAC;AAOpF,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,MAAM,GAAG,KAAK,EAAqB;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,YAAY,CAAC;QAC9B,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC;QAChC,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEjC,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,aACpE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,KAAC,IAAI,cAAU,QAAQ,KAAK,CAAC,KAAK,IAAI,IAAI,SAAS,IAAxC,CAAC,CAA+C,CAC5D,CAAC,EACF,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,uCAAwB,GAClC,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import React, { useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useAnimation } from '../hooks/useAnimation.js';\nimport { getFrames, FRAME_DELAYS, type AnimationMode } from '../lib/logo-frames.js';\n\ninterface AnimatedLogoProps {\n mode?: AnimationMode;\n paused?: boolean;\n}\n\nexport function AnimatedLogo({ mode = 'spin', paused = false }: AnimatedLogoProps): React.ReactElement {\n const frames = useMemo(() => getFrames(mode), [mode]);\n const frameIndex = useAnimation({\n frameCount: frames.length,\n frameDelayMs: FRAME_DELAYS[mode],\n paused,\n });\n\n const frame = frames[frameIndex];\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\">\n {frame.lines.map((line, i) => (\n <Text key={i}>{`\\x1b[${frame.color}m${line}\\x1b[0m`}</Text>\n ))}\n <Box marginTop={1}>\n <Text dimColor>WorkOS Installer</Text>\n </Box>\n </Box>\n );\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionView.js","sourceRoot":"","sources":["../../../src/dashboard/components/CompletionView.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAclD,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAuB;IACjF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IAErF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACzB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACvC,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC;IAEtE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,aAEhE,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YACxC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,GACzD,GACH,EAEL,OAAO,IAAI,CACV,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,cAAE,OAAO,GAAQ,GAClB,CACP,EAGD,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aACzF,MAAC,IAAI,IAAC,IAAI,QAAC,QAAQ,mCACJ,YAAY,GAAG,CAAC,OAAG,YAAY,GAAG,YAAY,CAAC,MAAM,UAAM,SAAS,CAAC,MAAM,SACnF,EACN,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC7B,KAAC,IAAI,IAAS,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,YAC7E,IAAI,CAAC,IAAI,IADD,CAAC,CAEL,CACR,CAAC,IACE,EAGN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,kEAAyC,GACnD,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import React, { useState } from 'react';\nimport { Box, Text, useInput, useApp } from 'ink';\n\ninterface OutputLine {\n text: string;\n isError?: boolean;\n isStatus?: boolean;\n}\n\ninterface CompletionViewProps {\n success: boolean;\n summary?: string;\n outputLog: OutputLine[];\n}\n\nexport function CompletionView({ success, summary, outputLog }: CompletionViewProps): React.ReactElement {\n const { exit } = useApp();\n const [scrollOffset, setScrollOffset] = useState(Math.max(0, outputLog.length - 20));\n\n useInput((input, key) => {\n if (key.upArrow) {\n setScrollOffset((prev) => Math.max(0, prev - 1));\n } else if (key.downArrow) {\n setScrollOffset((prev) => Math.min(outputLog.length - 1, prev + 1));\n } else if (key.return || input === 'q') {\n exit();\n }\n });\n\n const visibleLines = outputLog.slice(scrollOffset, scrollOffset + 20);\n\n return (\n <Box flexDirection=\"column\" padding={1} width=\"100%\" height=\"100%\">\n {/* Header */}\n <Box marginBottom={1}>\n <Text bold color={success ? 'green' : 'red'}>\n {success ? '✓ Installation Complete' : '✗ Installation Failed'}\n </Text>\n </Box>\n\n {summary && (\n <Box marginBottom={1}>\n <Text>{summary}</Text>\n </Box>\n )}\n\n {/* Scrollable Log */}\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" flexGrow={1} paddingX={1}>\n <Text bold dimColor>\n Output Log [{scrollOffset + 1}-{scrollOffset + visibleLines.length} of {outputLog.length}]\n </Text>\n {visibleLines.map((line, i) => (\n <Text key={i} color={line.isError ? 'red' : line.isStatus ? 'yellow' : undefined}>\n {line.text}\n </Text>\n ))}\n </Box>\n\n {/* Footer */}\n <Box marginTop={1}>\n <Text dimColor>↑/↓ to scroll, Enter or Q to exit</Text>\n </Box>\n </Box>\n );\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmPrompt.js","sourceRoot":"","sources":["../../../src/dashboard/components/ConfirmPrompt.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAS1C,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAsB;IACtF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAe,KAAK,CAAC,CAAC;IAE9D,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACnC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC1C,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACtB,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACpC,OAAO,IAAI,CACV,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,8BACpB,OAAO,IACL,GACH,CACP,EAEA,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5B,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aACxC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACnC,KAAC,IAAI,IAAS,QAAQ,kBACnB,IAAI,IADI,CAAC,CAEL,CACR,CAAC,EACD,KAAK,CAAC,MAAM,GAAG,EAAE,IAAI,MAAC,IAAI,IAAC,QAAQ,8BAAS,KAAK,CAAC,MAAM,GAAG,EAAE,aAAa,IACvE,CACP,EAED,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,cAAE,OAAO,GAAQ,GAClB,EAEN,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,KAAK,KAAK,aAC3E,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAC5B,EACP,KAAC,IAAI,oBAAS,EACd,MAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,aACzE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAC3B,IACH,EAEN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,wEAA+C,GACzD,IACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\n\ninterface ConfirmPromptProps {\n message: string;\n warning?: string;\n files?: string[];\n onConfirm: (confirmed: boolean) => void;\n}\n\nexport function ConfirmPrompt({ message, warning, files, onConfirm }: ConfirmPromptProps): React.ReactElement {\n const [selected, setSelected] = useState<'yes' | 'no'>('yes');\n\n useInput((input, key) => {\n if (key.leftArrow || input === 'h') {\n setSelected('yes');\n } else if (key.rightArrow || input === 'l') {\n setSelected('no');\n } else if (input === 'y' || input === 'Y') {\n onConfirm(true);\n } else if (input === 'n' || input === 'N') {\n onConfirm(false);\n } else if (key.return) {\n onConfirm(selected === 'yes');\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {warning && (\n <Box marginBottom={1}>\n <Text color=\"yellow\" bold>\n ⚠ {warning}\n </Text>\n </Box>\n )}\n\n {files && files.length > 0 && (\n <Box flexDirection=\"column\" marginBottom={1}>\n {files.slice(0, 10).map((file, i) => (\n <Text key={i} dimColor>\n {file}\n </Text>\n ))}\n {files.length > 10 && <Text dimColor>...and {files.length - 10} more</Text>}\n </Box>\n )}\n\n <Box marginBottom={1}>\n <Text>{message}</Text>\n </Box>\n\n <Box>\n <Text color={selected === 'yes' ? 'cyan' : undefined} bold={selected === 'yes'}>\n {selected === 'yes' ? '● ' : '○ '}Yes\n </Text>\n <Text> </Text>\n <Text color={selected === 'no' ? 'cyan' : undefined} bold={selected === 'no'}>\n {selected === 'no' ? '● ' : '○ '}No\n </Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>←/→ or y/n to select | Enter to confirm</Text>\n </Box>\n </Box>\n );\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialsForm.js","sourceRoot":"","sources":["../../../src/dashboard/components/CredentialsForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { TextInput } from './TextInput.js';\n\ninterface CredentialsFormProps {\n requiresApiKey: boolean;\n onSubmit: (credentials: { apiKey: string; clientId: string }) => void;\n}\n\ntype Field = 'apiKey' | 'clientId';\n\nexport function CredentialsForm({ requiresApiKey, onSubmit }: CredentialsFormProps): React.ReactElement {\n const [apiKey, setApiKey] = useState('');\n const [clientId, setClientId] = useState('');\n const [focusedField, setFocusedField] = useState<Field>(requiresApiKey ? 'apiKey' : 'clientId');\n const [errors, setErrors] = useState<{ apiKey?: string; clientId?: string }>({});\n\n const validate = (): boolean => {\n const newErrors: { apiKey?: string; clientId?: string } = {};\n\n if (requiresApiKey && !apiKey) {\n newErrors.apiKey = 'API Key is required';\n } else if (requiresApiKey && !apiKey.startsWith('sk_')) {\n newErrors.apiKey = 'API Key should start with sk_';\n }\n\n if (!clientId) {\n newErrors.clientId = 'Client ID is required';\n } else if (!clientId.startsWith('client_')) {\n newErrors.clientId = 'Client ID should start with client_';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = () => {\n if (validate()) {\n onSubmit({ apiKey, clientId });\n }\n };\n\n // Tab/arrows to switch fields\n useInput((input, key) => {\n if (key.tab || key.downArrow) {\n if (requiresApiKey) {\n setFocusedField((prev) => (prev === 'apiKey' ? 'clientId' : 'apiKey'));\n }\n } else if (key.upArrow) {\n if (requiresApiKey) {\n setFocusedField((prev) => (prev === 'clientId' ? 'apiKey' : 'clientId'));\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Box marginBottom={1}>\n <Text color=\"cyan\" bold>\n Enter your WorkOS credentials\n </Text>\n </Box>\n <Box marginBottom={1}>\n <Text dimColor>Get them from https://dashboard.workos.com</Text>\n </Box>\n\n <Box flexDirection=\"column\" marginTop={1}>\n {requiresApiKey && (\n <Box marginBottom={1}>\n <TextInput\n label=\"API Key\"\n placeholder=\"sk_...\"\n mask={true}\n value={apiKey}\n onChange={setApiKey}\n onSubmit={() => setFocusedField('clientId')}\n focused={focusedField === 'apiKey'}\n error={errors.apiKey}\n />\n </Box>\n )}\n\n <Box marginBottom={1}>\n <TextInput\n label=\"Client ID\"\n placeholder=\"client_...\"\n value={clientId}\n onChange={setClientId}\n onSubmit={handleSubmit}\n focused={focusedField === 'clientId'}\n error={errors.clientId}\n />\n </Box>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>{requiresApiKey ? 'Tab: switch fields | ' : ''}Ctrl+U: clear | Enter: continue</Text>\n </Box>\n </Box>\n );\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../../src/dashboard/components/Dashboard.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { useInput } from 'ink';\nimport { DashboardLayout } from './DashboardLayout.js';\nimport { CompletionView } from './CompletionView.js';\nimport type { DashboardProps } from '../types.js';\n\ntype DashboardState = 'running' | 'complete';\ntype FocusedPanel = 'changes' | 'output';\n\ninterface OutputLine {\n text: string;\n isError?: boolean;\n isStatus?: boolean;\n}\n\ninterface ConfirmRequest {\n id: string;\n message: string;\n warning?: string;\n files?: string[];\n}\n\nexport function Dashboard({ emitter }: DashboardProps): React.ReactElement {\n const [state, setState] = useState<DashboardState>('running');\n const [focusedPanel, setFocusedPanel] = useState<FocusedPanel>('changes');\n const [completionData, setCompletionData] = useState<{\n success: boolean;\n summary?: string;\n } | null>(null);\n const [outputLog, setOutputLog] = useState<OutputLine[]>([]);\n const [confirmRequest, setConfirmRequest] = useState<ConfirmRequest | null>(null);\n const [credentialsRequest, setCredentialsRequest] = useState<{\n requiresApiKey: boolean;\n } | null>(null);\n\n // Tab to switch focus between panels (only when not in a prompt)\n useInput(\n (input, key) => {\n if (key.tab) {\n setFocusedPanel((prev) => (prev === 'changes' ? 'output' : 'changes'));\n }\n },\n { isActive: state === 'running' && !credentialsRequest && !confirmRequest },\n );\n\n useEffect(() => {\n const handleOutput = ({ text, isError }: { text: string; isError?: boolean }) => {\n const newLines = text.split('\\n').map((line) => ({\n text: line,\n isError,\n isStatus: line.includes('[STATUS]'),\n }));\n setOutputLog((prev) => [...prev, ...newLines]);\n };\n\n const handleStatus = ({ message }: { message: string }) => {\n setOutputLog((prev) => [...prev, { text: `[STATUS] ${message}`, isStatus: true }]);\n };\n\n const handleComplete = ({ success, summary }: { success: boolean; summary?: string }) => {\n setCompletionData({ success, summary });\n setState('complete');\n };\n\n const handleError = ({ message }: { message: string }) => {\n setOutputLog((prev) => [...prev, { text: `ERROR: ${message}`, isError: true }]);\n };\n\n const handleCredentialsRequest = ({ requiresApiKey }: { requiresApiKey: boolean }) => {\n setCredentialsRequest({ requiresApiKey });\n };\n\n const handleConfirmRequest = ({\n id,\n message,\n warning,\n files,\n }: {\n id: string;\n message: string;\n warning?: string;\n files?: string[];\n }) => {\n setConfirmRequest({ id, message, warning, files });\n };\n\n const handleValidationStart = () => {\n setOutputLog((prev) => [...prev, { text: '[STATUS] Validating installation...', isStatus: true }]);\n };\n\n const handleValidationIssues = ({\n issues,\n }: {\n issues: Array<{ severity: string; message: string; hint?: string }>;\n }) => {\n for (const issue of issues) {\n const prefix = issue.severity === 'error' ? '!' : '?';\n setOutputLog((prev) => [...prev, { text: `${prefix} ${issue.message}`, isError: issue.severity === 'error' }]);\n if (issue.hint) {\n setOutputLog((prev) => [...prev, { text: ` Hint: ${issue.hint}` }]);\n }\n }\n };\n\n const handleValidationComplete = ({ passed, issueCount }: { passed: boolean; issueCount: number }) => {\n if (passed) {\n setOutputLog((prev) => [...prev, { text: '[STATUS] Validation passed', isStatus: true }]);\n } else {\n setOutputLog((prev) => [...prev, { text: `[STATUS] Validation found ${issueCount} issue(s)`, isStatus: true }]);\n }\n };\n\n emitter.on('output', handleOutput);\n emitter.on('status', handleStatus);\n emitter.on('complete', handleComplete);\n emitter.on('error', handleError);\n emitter.on('credentials:request', handleCredentialsRequest);\n emitter.on('confirm:request', handleConfirmRequest);\n emitter.on('validation:start', handleValidationStart);\n emitter.on('validation:issues', handleValidationIssues);\n emitter.on('validation:complete', handleValidationComplete);\n\n return () => {\n emitter.off('output', handleOutput);\n emitter.off('status', handleStatus);\n emitter.off('complete', handleComplete);\n emitter.off('error', handleError);\n emitter.off('credentials:request', handleCredentialsRequest);\n emitter.off('confirm:request', handleConfirmRequest);\n emitter.off('validation:start', handleValidationStart);\n emitter.off('validation:issues', handleValidationIssues);\n emitter.off('validation:complete', handleValidationComplete);\n };\n }, [emitter]);\n\n const handleConfirm = (confirmed: boolean) => {\n if (confirmRequest) {\n emitter.emit('confirm:response', { id: confirmRequest.id, confirmed });\n setConfirmRequest(null);\n }\n };\n\n const handleCredentialsSubmit = (credentials: { apiKey: string; clientId: string }) => {\n emitter.emit('credentials:response', credentials);\n setCredentialsRequest(null);\n };\n\n if (state === 'complete' && completionData) {\n return <CompletionView success={completionData.success} summary={completionData.summary} outputLog={outputLog} />;\n }\n\n return (\n <DashboardLayout\n emitter={emitter}\n focusedPanel={focusedPanel}\n confirmRequest={confirmRequest}\n onConfirm={handleConfirm}\n credentialsRequest={credentialsRequest}\n onCredentialsSubmit={handleCredentialsSubmit}\n />\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { WizardEventEmitter } from '../../lib/events.js';
2
+ import type { InstallerEventEmitter } from '../../lib/events.js';
3
3
  type FocusedPanel = 'changes' | 'output';
4
4
  interface ConfirmRequest {
5
5
  id: string;
@@ -8,7 +8,7 @@ interface ConfirmRequest {
8
8
  files?: string[];
9
9
  }
10
10
  interface DashboardLayoutProps {
11
- emitter: WizardEventEmitter;
11
+ emitter: InstallerEventEmitter;
12
12
  focusedPanel?: FocusedPanel;
13
13
  confirmRequest?: ConfirmRequest | null;
14
14
  onConfirm?: (confirmed: boolean) => void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardLayout.js","sourceRoot":"","sources":["../../../src/dashboard/components/DashboardLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTerminalSize, MIN_COLUMNS, MIN_ROWS } from '../hooks/useTerminalSize.js';\nimport { Panel } from './Panel.js';\nimport { OutputPanel } from './OutputPanel.js';\nimport { DiffPanel } from './DiffPanel.js';\nimport { AnimatedLogo } from './AnimatedLogo.js';\nimport { CredentialsForm } from './CredentialsForm.js';\nimport { ConfirmPrompt } from './ConfirmPrompt.js';\nimport type { InstallerEventEmitter } from '../../lib/events.js';\n\ntype FocusedPanel = 'changes' | 'output';\n\ninterface ConfirmRequest {\n id: string;\n message: string;\n warning?: string;\n files?: string[];\n}\n\ninterface DashboardLayoutProps {\n emitter: InstallerEventEmitter;\n focusedPanel?: FocusedPanel;\n confirmRequest?: ConfirmRequest | null;\n onConfirm?: (confirmed: boolean) => void;\n credentialsRequest?: { requiresApiKey: boolean } | null;\n onCredentialsSubmit?: (credentials: { apiKey: string; clientId: string }) => void;\n}\n\nexport function DashboardLayout({\n emitter,\n focusedPanel = 'changes',\n confirmRequest,\n onConfirm,\n credentialsRequest,\n onCredentialsSubmit,\n}: DashboardLayoutProps): React.ReactElement {\n const { columns, rows } = useTerminalSize();\n\n // Check minimum size\n if (columns < MIN_COLUMNS || rows < MIN_ROWS) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"yellow\">Terminal too small</Text>\n <Text dimColor>\n Minimum size: {MIN_COLUMNS}x{MIN_ROWS}\n </Text>\n <Text dimColor>\n Current size: {columns}x{rows}\n </Text>\n </Box>\n );\n }\n\n // Calculate explicit heights - reserve 1 row for help hint\n const availableRows = rows - 1;\n const topHeight = Math.floor(availableRows * 0.6);\n const bottomHeight = availableRows - topHeight;\n\n // Calculate widths for bottom panels\n const outputWidth = Math.floor(columns * 0.75);\n const statusWidth = columns - outputWidth;\n\n return (\n <Box flexDirection=\"column\" width={columns} height={rows}>\n {/* Top Panel - 60% height */}\n <Panel\n title={confirmRequest || credentialsRequest ? 'Setup' : 'Changes'}\n height={topHeight}\n borderColor={focusedPanel === 'changes' ? 'cyan' : 'gray'}\n contentHeight={topHeight - 4}\n >\n {confirmRequest && onConfirm ? (\n <ConfirmPrompt\n message={confirmRequest.message}\n warning={confirmRequest.warning}\n files={confirmRequest.files}\n onConfirm={onConfirm}\n />\n ) : credentialsRequest && onCredentialsSubmit ? (\n <CredentialsForm requiresApiKey={credentialsRequest.requiresApiKey} onSubmit={onCredentialsSubmit} />\n ) : (\n <DiffPanel emitter={emitter} focused={focusedPanel === 'changes'} height={topHeight - 4} />\n )}\n </Panel>\n\n {/* Bottom Row */}\n <Box flexDirection=\"row\" height={bottomHeight}>\n {/* Bottom Left - 75% width */}\n <Panel\n title=\"Output\"\n width={outputWidth}\n borderColor={focusedPanel === 'output' ? 'cyan' : 'gray'}\n contentHeight={bottomHeight - 4}\n >\n <OutputPanel emitter={emitter} focused={focusedPanel === 'output'} height={bottomHeight - 4} />\n </Panel>\n\n {/* Bottom Right - 25% width, no title */}\n <Panel width={statusWidth}>\n <Box alignItems=\"center\" justifyContent=\"center\" flexGrow={1}>\n <AnimatedLogo mode=\"spin\" />\n </Box>\n </Panel>\n </Box>\n\n {/* Help hint at bottom */}\n <Box>\n <Text dimColor> Tab: switch panel | j/k: scroll | gg/G: top/bottom</Text>\n </Box>\n </Box>\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
- import type { WizardEventEmitter } from '../../lib/events.js';
2
+ import type { InstallerEventEmitter } from '../../lib/events.js';
3
3
  interface DiffPanelProps {
4
- emitter: WizardEventEmitter;
4
+ emitter: InstallerEventEmitter;
5
5
  focused?: boolean;
6
6
  height?: number;
7
7
  }