workos 0.19.0 → 0.20.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 (681) hide show
  1. package/README.md +4 -646
  2. package/bin/workos.js +44 -0
  3. package/package.json +18 -99
  4. package/LICENSE +0 -47
  5. package/dist/bin.d.ts +0 -2
  6. package/dist/bin.js +0 -1790
  7. package/dist/bin.js.map +0 -1
  8. package/dist/cli.config.d.ts +0 -88
  9. package/dist/cli.config.js +0 -110
  10. package/dist/cli.config.js.map +0 -1
  11. package/dist/commands/api/catalog.d.ts +0 -23
  12. package/dist/commands/api/catalog.js +0 -97
  13. package/dist/commands/api/catalog.js.map +0 -1
  14. package/dist/commands/api/format.d.ts +0 -5
  15. package/dist/commands/api/format.js +0 -46
  16. package/dist/commands/api/format.js.map +0 -1
  17. package/dist/commands/api/index.d.ts +0 -15
  18. package/dist/commands/api/index.js +0 -213
  19. package/dist/commands/api/index.js.map +0 -1
  20. package/dist/commands/api/interactive.d.ts +0 -3
  21. package/dist/commands/api/interactive.js +0 -133
  22. package/dist/commands/api/interactive.js.map +0 -1
  23. package/dist/commands/api/request.d.ts +0 -14
  24. package/dist/commands/api/request.js +0 -38
  25. package/dist/commands/api/request.js.map +0 -1
  26. package/dist/commands/api-key-mgmt.d.ts +0 -16
  27. package/dist/commands/api-key-mgmt.js +0 -96
  28. package/dist/commands/api-key-mgmt.js.map +0 -1
  29. package/dist/commands/audit-log.d.ts +0 -26
  30. package/dist/commands/audit-log.js +0 -155
  31. package/dist/commands/audit-log.js.map +0 -1
  32. package/dist/commands/auth-status.d.ts +0 -1
  33. package/dist/commands/auth-status.js +0 -57
  34. package/dist/commands/auth-status.js.map +0 -1
  35. package/dist/commands/claim.d.ts +0 -11
  36. package/dist/commands/claim.js +0 -143
  37. package/dist/commands/claim.js.map +0 -1
  38. package/dist/commands/config.d.ts +0 -3
  39. package/dist/commands/config.js +0 -54
  40. package/dist/commands/config.js.map +0 -1
  41. package/dist/commands/connection.d.ts +0 -13
  42. package/dist/commands/connection.js +0 -96
  43. package/dist/commands/connection.js.map +0 -1
  44. package/dist/commands/debug-sso.d.ts +0 -1
  45. package/dist/commands/debug-sso.js +0 -78
  46. package/dist/commands/debug-sso.js.map +0 -1
  47. package/dist/commands/debug-sync.d.ts +0 -1
  48. package/dist/commands/debug-sync.js +0 -102
  49. package/dist/commands/debug-sync.js.map +0 -1
  50. package/dist/commands/debug.d.ts +0 -28
  51. package/dist/commands/debug.js +0 -406
  52. package/dist/commands/debug.js.map +0 -1
  53. package/dist/commands/dev.d.ts +0 -22
  54. package/dist/commands/dev.js +0 -145
  55. package/dist/commands/dev.js.map +0 -1
  56. package/dist/commands/directory.d.ts +0 -27
  57. package/dist/commands/directory.js +0 -176
  58. package/dist/commands/directory.js.map +0 -1
  59. package/dist/commands/doctor.d.ts +0 -12
  60. package/dist/commands/doctor.js +0 -41
  61. package/dist/commands/doctor.js.map +0 -1
  62. package/dist/commands/emulate.d.ts +0 -7
  63. package/dist/commands/emulate.js +0 -69
  64. package/dist/commands/emulate.js.map +0 -1
  65. package/dist/commands/env.d.ts +0 -19
  66. package/dist/commands/env.js +0 -303
  67. package/dist/commands/env.js.map +0 -1
  68. package/dist/commands/event.d.ts +0 -9
  69. package/dist/commands/event.js +0 -43
  70. package/dist/commands/event.js.map +0 -1
  71. package/dist/commands/feature-flag.d.ts +0 -12
  72. package/dist/commands/feature-flag.js +0 -96
  73. package/dist/commands/feature-flag.js.map +0 -1
  74. package/dist/commands/install-skill.d.ts +0 -85
  75. package/dist/commands/install-skill.js +0 -332
  76. package/dist/commands/install-skill.js.map +0 -1
  77. package/dist/commands/install.d.ts +0 -6
  78. package/dist/commands/install.js +0 -51
  79. package/dist/commands/install.js.map +0 -1
  80. package/dist/commands/invitation.d.ts +0 -19
  81. package/dist/commands/invitation.js +0 -94
  82. package/dist/commands/invitation.js.map +0 -1
  83. package/dist/commands/list-skills.d.ts +0 -4
  84. package/dist/commands/list-skills.js +0 -52
  85. package/dist/commands/list-skills.js.map +0 -1
  86. package/dist/commands/login.d.ts +0 -32
  87. package/dist/commands/login.js +0 -239
  88. package/dist/commands/login.js.map +0 -1
  89. package/dist/commands/logout.d.ts +0 -1
  90. package/dist/commands/logout.js +0 -17
  91. package/dist/commands/logout.js.map +0 -1
  92. package/dist/commands/mcp.d.ts +0 -14
  93. package/dist/commands/mcp.js +0 -99
  94. package/dist/commands/mcp.js.map +0 -1
  95. package/dist/commands/membership.d.ts +0 -20
  96. package/dist/commands/membership.js +0 -129
  97. package/dist/commands/membership.js.map +0 -1
  98. package/dist/commands/migrations.d.ts +0 -2
  99. package/dist/commands/migrations.js +0 -50
  100. package/dist/commands/migrations.js.map +0 -1
  101. package/dist/commands/onboard-user.d.ts +0 -7
  102. package/dist/commands/onboard-user.js +0 -61
  103. package/dist/commands/onboard-user.js.map +0 -1
  104. package/dist/commands/org-domain.d.ts +0 -4
  105. package/dist/commands/org-domain.js +0 -45
  106. package/dist/commands/org-domain.js.map +0 -1
  107. package/dist/commands/organization.d.ts +0 -14
  108. package/dist/commands/organization.js +0 -103
  109. package/dist/commands/organization.js.map +0 -1
  110. package/dist/commands/permission.d.ts +0 -20
  111. package/dist/commands/permission.js +0 -93
  112. package/dist/commands/permission.js.map +0 -1
  113. package/dist/commands/portal.d.ts +0 -7
  114. package/dist/commands/portal.js +0 -26
  115. package/dist/commands/portal.js.map +0 -1
  116. package/dist/commands/role.d.ts +0 -17
  117. package/dist/commands/role.js +0 -122
  118. package/dist/commands/role.js.map +0 -1
  119. package/dist/commands/seed.d.ts +0 -6
  120. package/dist/commands/seed.js +0 -298
  121. package/dist/commands/seed.js.map +0 -1
  122. package/dist/commands/session.d.ts +0 -8
  123. package/dist/commands/session.js +0 -63
  124. package/dist/commands/session.js.map +0 -1
  125. package/dist/commands/setup-org.d.ts +0 -6
  126. package/dist/commands/setup-org.js +0 -99
  127. package/dist/commands/setup-org.js.map +0 -1
  128. package/dist/commands/setup.d.ts +0 -50
  129. package/dist/commands/setup.js +0 -237
  130. package/dist/commands/setup.js.map +0 -1
  131. package/dist/commands/telemetry.d.ts +0 -3
  132. package/dist/commands/telemetry.js +0 -88
  133. package/dist/commands/telemetry.js.map +0 -1
  134. package/dist/commands/uninstall-skill.d.ts +0 -11
  135. package/dist/commands/uninstall-skill.js +0 -117
  136. package/dist/commands/uninstall-skill.js.map +0 -1
  137. package/dist/commands/user.d.ts +0 -19
  138. package/dist/commands/user.js +0 -92
  139. package/dist/commands/user.js.map +0 -1
  140. package/dist/commands/vault-run.d.ts +0 -13
  141. package/dist/commands/vault-run.js +0 -195
  142. package/dist/commands/vault-run.js.map +0 -1
  143. package/dist/commands/vault.d.ts +0 -25
  144. package/dist/commands/vault.js +0 -153
  145. package/dist/commands/vault.js.map +0 -1
  146. package/dist/commands/verify-login.d.ts +0 -25
  147. package/dist/commands/verify-login.js +0 -158
  148. package/dist/commands/verify-login.js.map +0 -1
  149. package/dist/commands/webhook.d.ts +0 -3
  150. package/dist/commands/webhook.js +0 -92
  151. package/dist/commands/webhook.js.map +0 -1
  152. package/dist/craft-pre-release.sh +0 -10
  153. package/dist/dashboard/components/AnimatedLogo.d.ts +0 -8
  154. package/dist/dashboard/components/AnimatedLogo.js +0 -16
  155. package/dist/dashboard/components/AnimatedLogo.js.map +0 -1
  156. package/dist/dashboard/components/CompletionView.d.ts +0 -13
  157. package/dist/dashboard/components/CompletionView.js +0 -25
  158. package/dist/dashboard/components/CompletionView.js.map +0 -1
  159. package/dist/dashboard/components/ConfirmPrompt.d.ts +0 -9
  160. package/dist/dashboard/components/ConfirmPrompt.js +0 -25
  161. package/dist/dashboard/components/ConfirmPrompt.js.map +0 -1
  162. package/dist/dashboard/components/CredentialsForm.d.ts +0 -10
  163. package/dist/dashboard/components/CredentialsForm.js +0 -47
  164. package/dist/dashboard/components/CredentialsForm.js.map +0 -1
  165. package/dist/dashboard/components/Dashboard.d.ts +0 -3
  166. package/dist/dashboard/components/Dashboard.js +0 -100
  167. package/dist/dashboard/components/Dashboard.js.map +0 -1
  168. package/dist/dashboard/components/DashboardLayout.d.ts +0 -24
  169. package/dist/dashboard/components/DashboardLayout.js +0 -25
  170. package/dist/dashboard/components/DashboardLayout.js.map +0 -1
  171. package/dist/dashboard/components/DiffPanel.d.ts +0 -9
  172. package/dist/dashboard/components/DiffPanel.js +0 -136
  173. package/dist/dashboard/components/DiffPanel.js.map +0 -1
  174. package/dist/dashboard/components/InlinePrompt.d.ts +0 -8
  175. package/dist/dashboard/components/InlinePrompt.js +0 -19
  176. package/dist/dashboard/components/InlinePrompt.js.map +0 -1
  177. package/dist/dashboard/components/OutputPanel.d.ts +0 -10
  178. package/dist/dashboard/components/OutputPanel.js +0 -100
  179. package/dist/dashboard/components/OutputPanel.js.map +0 -1
  180. package/dist/dashboard/components/Panel.d.ts +0 -12
  181. package/dist/dashboard/components/Panel.js +0 -6
  182. package/dist/dashboard/components/Panel.js.map +0 -1
  183. package/dist/dashboard/components/TextInput.d.ts +0 -13
  184. package/dist/dashboard/components/TextInput.js +0 -57
  185. package/dist/dashboard/components/TextInput.js.map +0 -1
  186. package/dist/dashboard/components/WelcomeArt.d.ts +0 -2
  187. package/dist/dashboard/components/WelcomeArt.js +0 -9
  188. package/dist/dashboard/components/WelcomeArt.js.map +0 -1
  189. package/dist/dashboard/hooks/useAnimation.d.ts +0 -7
  190. package/dist/dashboard/hooks/useAnimation.js +0 -24
  191. package/dist/dashboard/hooks/useAnimation.js.map +0 -1
  192. package/dist/dashboard/hooks/useKeyboard.d.ts +0 -8
  193. package/dist/dashboard/hooks/useKeyboard.js +0 -18
  194. package/dist/dashboard/hooks/useKeyboard.js.map +0 -1
  195. package/dist/dashboard/hooks/useTerminalSize.d.ts +0 -8
  196. package/dist/dashboard/hooks/useTerminalSize.js +0 -23
  197. package/dist/dashboard/hooks/useTerminalSize.js.map +0 -1
  198. package/dist/dashboard/index.d.ts +0 -6
  199. package/dist/dashboard/index.js +0 -36
  200. package/dist/dashboard/index.js.map +0 -1
  201. package/dist/dashboard/lib/diff-utils.d.ts +0 -21
  202. package/dist/dashboard/lib/diff-utils.js +0 -271
  203. package/dist/dashboard/lib/diff-utils.js.map +0 -1
  204. package/dist/dashboard/lib/logo-frames.d.ts +0 -20
  205. package/dist/dashboard/lib/logo-frames.js +0 -109
  206. package/dist/dashboard/lib/logo-frames.js.map +0 -1
  207. package/dist/dashboard/lib/welcome-art.d.ts +0 -1
  208. package/dist/dashboard/lib/welcome-art.js +0 -5
  209. package/dist/dashboard/lib/welcome-art.js.map +0 -1
  210. package/dist/dashboard/types.d.ts +0 -5
  211. package/dist/dashboard/types.js +0 -2
  212. package/dist/dashboard/types.js.map +0 -1
  213. package/dist/doctor/agent-prompt.d.ts +0 -10
  214. package/dist/doctor/agent-prompt.js +0 -190
  215. package/dist/doctor/agent-prompt.js.map +0 -1
  216. package/dist/doctor/checks/ai-analysis.d.ts +0 -9
  217. package/dist/doctor/checks/ai-analysis.js +0 -124
  218. package/dist/doctor/checks/ai-analysis.js.map +0 -1
  219. package/dist/doctor/checks/auth-patterns.d.ts +0 -2
  220. package/dist/doctor/checks/auth-patterns.js +0 -569
  221. package/dist/doctor/checks/auth-patterns.js.map +0 -1
  222. package/dist/doctor/checks/connectivity.d.ts +0 -2
  223. package/dist/doctor/checks/connectivity.js +0 -35
  224. package/dist/doctor/checks/connectivity.js.map +0 -1
  225. package/dist/doctor/checks/dashboard.d.ts +0 -3
  226. package/dist/doctor/checks/dashboard.js +0 -123
  227. package/dist/doctor/checks/dashboard.js.map +0 -1
  228. package/dist/doctor/checks/environment.d.ts +0 -2
  229. package/dist/doctor/checks/environment.js +0 -86
  230. package/dist/doctor/checks/environment.js.map +0 -1
  231. package/dist/doctor/checks/framework.d.ts +0 -2
  232. package/dist/doctor/checks/framework.js +0 -94
  233. package/dist/doctor/checks/framework.js.map +0 -1
  234. package/dist/doctor/checks/host-execution.d.ts +0 -2
  235. package/dist/doctor/checks/host-execution.js +0 -21
  236. package/dist/doctor/checks/host-execution.js.map +0 -1
  237. package/dist/doctor/checks/language.d.ts +0 -6
  238. package/dist/doctor/checks/language.js +0 -104
  239. package/dist/doctor/checks/language.js.map +0 -1
  240. package/dist/doctor/checks/mcp.d.ts +0 -15
  241. package/dist/doctor/checks/mcp.js +0 -34
  242. package/dist/doctor/checks/mcp.js.map +0 -1
  243. package/dist/doctor/checks/runtime.d.ts +0 -2
  244. package/dist/doctor/checks/runtime.js +0 -20
  245. package/dist/doctor/checks/runtime.js.map +0 -1
  246. package/dist/doctor/checks/sdk.d.ts +0 -2
  247. package/dist/doctor/checks/sdk.js +0 -192
  248. package/dist/doctor/checks/sdk.js.map +0 -1
  249. package/dist/doctor/checks/skills.d.ts +0 -9
  250. package/dist/doctor/checks/skills.js +0 -84
  251. package/dist/doctor/checks/skills.js.map +0 -1
  252. package/dist/doctor/clipboard.d.ts +0 -1
  253. package/dist/doctor/clipboard.js +0 -43
  254. package/dist/doctor/clipboard.js.map +0 -1
  255. package/dist/doctor/index.d.ts +0 -26
  256. package/dist/doctor/index.js +0 -182
  257. package/dist/doctor/index.js.map +0 -1
  258. package/dist/doctor/issues.d.ts +0 -63
  259. package/dist/doctor/issues.js +0 -199
  260. package/dist/doctor/issues.js.map +0 -1
  261. package/dist/doctor/json-output.d.ts +0 -2
  262. package/dist/doctor/json-output.js +0 -4
  263. package/dist/doctor/json-output.js.map +0 -1
  264. package/dist/doctor/output.d.ts +0 -7
  265. package/dist/doctor/output.js +0 -289
  266. package/dist/doctor/output.js.map +0 -1
  267. package/dist/doctor/types.d.ts +0 -203
  268. package/dist/doctor/types.js +0 -2
  269. package/dist/doctor/types.js.map +0 -1
  270. package/dist/integrations/dotnet/index.d.ts +0 -8
  271. package/dist/integrations/dotnet/index.js +0 -170
  272. package/dist/integrations/dotnet/index.js.map +0 -1
  273. package/dist/integrations/elixir/index.d.ts +0 -8
  274. package/dist/integrations/elixir/index.js +0 -146
  275. package/dist/integrations/elixir/index.js.map +0 -1
  276. package/dist/integrations/go/index.d.ts +0 -11
  277. package/dist/integrations/go/index.js +0 -212
  278. package/dist/integrations/go/index.js.map +0 -1
  279. package/dist/integrations/kotlin/index.d.ts +0 -4
  280. package/dist/integrations/kotlin/index.js +0 -78
  281. package/dist/integrations/kotlin/index.js.map +0 -1
  282. package/dist/integrations/nextjs/index.d.ts +0 -4
  283. package/dist/integrations/nextjs/index.js +0 -93
  284. package/dist/integrations/nextjs/index.js.map +0 -1
  285. package/dist/integrations/nextjs/utils.d.ts +0 -8
  286. package/dist/integrations/nextjs/utils.js +0 -68
  287. package/dist/integrations/nextjs/utils.js.map +0 -1
  288. package/dist/integrations/node/index.d.ts +0 -4
  289. package/dist/integrations/node/index.js +0 -52
  290. package/dist/integrations/node/index.js.map +0 -1
  291. package/dist/integrations/php/index.d.ts +0 -4
  292. package/dist/integrations/php/index.js +0 -51
  293. package/dist/integrations/php/index.js.map +0 -1
  294. package/dist/integrations/php-laravel/index.d.ts +0 -4
  295. package/dist/integrations/php-laravel/index.js +0 -51
  296. package/dist/integrations/php-laravel/index.js.map +0 -1
  297. package/dist/integrations/python/index.d.ts +0 -9
  298. package/dist/integrations/python/index.js +0 -249
  299. package/dist/integrations/python/index.js.map +0 -1
  300. package/dist/integrations/react/index.d.ts +0 -4
  301. package/dist/integrations/react/index.js +0 -49
  302. package/dist/integrations/react/index.js.map +0 -1
  303. package/dist/integrations/react-router/index.d.ts +0 -4
  304. package/dist/integrations/react-router/index.js +0 -94
  305. package/dist/integrations/react-router/index.js.map +0 -1
  306. package/dist/integrations/react-router/utils.d.ts +0 -10
  307. package/dist/integrations/react-router/utils.js +0 -162
  308. package/dist/integrations/react-router/utils.js.map +0 -1
  309. package/dist/integrations/ruby/index.d.ts +0 -8
  310. package/dist/integrations/ruby/index.js +0 -137
  311. package/dist/integrations/ruby/index.js.map +0 -1
  312. package/dist/integrations/sveltekit/index.d.ts +0 -4
  313. package/dist/integrations/sveltekit/index.js +0 -50
  314. package/dist/integrations/sveltekit/index.js.map +0 -1
  315. package/dist/integrations/tanstack-start/index.d.ts +0 -4
  316. package/dist/integrations/tanstack-start/index.js +0 -51
  317. package/dist/integrations/tanstack-start/index.js.map +0 -1
  318. package/dist/integrations/vanilla-js/index.d.ts +0 -4
  319. package/dist/integrations/vanilla-js/index.js +0 -49
  320. package/dist/integrations/vanilla-js/index.js.map +0 -1
  321. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.d.ts +0 -7
  322. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js +0 -12
  323. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js.map +0 -1
  324. package/dist/lib/adapters/cli-adapter.d.ts +0 -113
  325. package/dist/lib/adapters/cli-adapter.js +0 -641
  326. package/dist/lib/adapters/cli-adapter.js.map +0 -1
  327. package/dist/lib/adapters/dashboard-adapter.d.ts +0 -34
  328. package/dist/lib/adapters/dashboard-adapter.js +0 -121
  329. package/dist/lib/adapters/dashboard-adapter.js.map +0 -1
  330. package/dist/lib/adapters/headless-adapter.d.ts +0 -80
  331. package/dist/lib/adapters/headless-adapter.js +0 -347
  332. package/dist/lib/adapters/headless-adapter.js.map +0 -1
  333. package/dist/lib/adapters/index.d.ts +0 -4
  334. package/dist/lib/adapters/index.js +0 -4
  335. package/dist/lib/adapters/index.js.map +0 -1
  336. package/dist/lib/adapters/types.d.ts +0 -41
  337. package/dist/lib/adapters/types.js +0 -2
  338. package/dist/lib/adapters/types.js.map +0 -1
  339. package/dist/lib/agent-interface.d.ts +0 -84
  340. package/dist/lib/agent-interface.js +0 -840
  341. package/dist/lib/agent-interface.js.map +0 -1
  342. package/dist/lib/agent-runner.d.ts +0 -9
  343. package/dist/lib/agent-runner.js +0 -261
  344. package/dist/lib/agent-runner.js.map +0 -1
  345. package/dist/lib/ai-content.d.ts +0 -14
  346. package/dist/lib/ai-content.js +0 -131
  347. package/dist/lib/ai-content.js.map +0 -1
  348. package/dist/lib/api-error-handler.d.ts +0 -18
  349. package/dist/lib/api-error-handler.js +0 -76
  350. package/dist/lib/api-error-handler.js.map +0 -1
  351. package/dist/lib/api-key.d.ts +0 -14
  352. package/dist/lib/api-key.js +0 -37
  353. package/dist/lib/api-key.js.map +0 -1
  354. package/dist/lib/api.d.ts +0 -25
  355. package/dist/lib/api.js +0 -120
  356. package/dist/lib/api.js.map +0 -1
  357. package/dist/lib/background-refresh.d.ts +0 -29
  358. package/dist/lib/background-refresh.js +0 -95
  359. package/dist/lib/background-refresh.js.map +0 -1
  360. package/dist/lib/command-aliases.d.ts +0 -8
  361. package/dist/lib/command-aliases.js +0 -12
  362. package/dist/lib/command-aliases.js.map +0 -1
  363. package/dist/lib/completion-data.d.ts +0 -33
  364. package/dist/lib/completion-data.js +0 -33
  365. package/dist/lib/completion-data.js.map +0 -1
  366. package/dist/lib/config-store.d.ts +0 -63
  367. package/dist/lib/config-store.js +0 -293
  368. package/dist/lib/config-store.js.map +0 -1
  369. package/dist/lib/config.d.ts +0 -34
  370. package/dist/lib/config.js +0 -37
  371. package/dist/lib/config.js.map +0 -1
  372. package/dist/lib/constants.d.ts +0 -51
  373. package/dist/lib/constants.js +0 -50
  374. package/dist/lib/constants.js.map +0 -1
  375. package/dist/lib/credential-discovery.d.ts +0 -42
  376. package/dist/lib/credential-discovery.js +0 -100
  377. package/dist/lib/credential-discovery.js.map +0 -1
  378. package/dist/lib/credential-proxy.d.ts +0 -45
  379. package/dist/lib/credential-proxy.js +0 -364
  380. package/dist/lib/credential-proxy.js.map +0 -1
  381. package/dist/lib/credential-store.d.ts +0 -32
  382. package/dist/lib/credential-store.js +0 -236
  383. package/dist/lib/credential-store.js.map +0 -1
  384. package/dist/lib/credentials.d.ts +0 -13
  385. package/dist/lib/credentials.js +0 -34
  386. package/dist/lib/credentials.js.map +0 -1
  387. package/dist/lib/dev-command.d.ts +0 -26
  388. package/dist/lib/dev-command.js +0 -129
  389. package/dist/lib/dev-command.js.map +0 -1
  390. package/dist/lib/device-auth.d.ts +0 -48
  391. package/dist/lib/device-auth.js +0 -176
  392. package/dist/lib/device-auth.js.map +0 -1
  393. package/dist/lib/device-id.d.ts +0 -25
  394. package/dist/lib/device-id.js +0 -102
  395. package/dist/lib/device-id.js.map +0 -1
  396. package/dist/lib/ensure-auth.d.ts +0 -12
  397. package/dist/lib/ensure-auth.js +0 -111
  398. package/dist/lib/ensure-auth.js.map +0 -1
  399. package/dist/lib/env-writer.d.ts +0 -25
  400. package/dist/lib/env-writer.js +0 -90
  401. package/dist/lib/env-writer.js.map +0 -1
  402. package/dist/lib/events.d.ts +0 -248
  403. package/dist/lib/events.js +0 -19
  404. package/dist/lib/events.js.map +0 -1
  405. package/dist/lib/framework-config.d.ts +0 -133
  406. package/dist/lib/framework-config.js +0 -11
  407. package/dist/lib/framework-config.js.map +0 -1
  408. package/dist/lib/helper-functions.d.ts +0 -1
  409. package/dist/lib/helper-functions.js +0 -2
  410. package/dist/lib/helper-functions.js.map +0 -1
  411. package/dist/lib/host-probe.d.ts +0 -28
  412. package/dist/lib/host-probe.js +0 -154
  413. package/dist/lib/host-probe.js.map +0 -1
  414. package/dist/lib/installer-core.d.ts +0 -569
  415. package/dist/lib/installer-core.js +0 -1134
  416. package/dist/lib/installer-core.js.map +0 -1
  417. package/dist/lib/installer-core.types.d.ts +0 -162
  418. package/dist/lib/installer-core.types.js +0 -2
  419. package/dist/lib/installer-core.types.js.map +0 -1
  420. package/dist/lib/mcp-clients.d.ts +0 -45
  421. package/dist/lib/mcp-clients.js +0 -297
  422. package/dist/lib/mcp-clients.js.map +0 -1
  423. package/dist/lib/port-detection.d.ts +0 -7
  424. package/dist/lib/port-detection.js +0 -244
  425. package/dist/lib/port-detection.js.map +0 -1
  426. package/dist/lib/post-install.d.ts +0 -8
  427. package/dist/lib/post-install.js +0 -51
  428. package/dist/lib/post-install.js.map +0 -1
  429. package/dist/lib/preferences.d.ts +0 -143
  430. package/dist/lib/preferences.js +0 -227
  431. package/dist/lib/preferences.js.map +0 -1
  432. package/dist/lib/progress-tracker.d.ts +0 -22
  433. package/dist/lib/progress-tracker.js +0 -47
  434. package/dist/lib/progress-tracker.js.map +0 -1
  435. package/dist/lib/registry.d.ts +0 -42
  436. package/dist/lib/registry.js +0 -96
  437. package/dist/lib/registry.js.map +0 -1
  438. package/dist/lib/resolve-install-credentials.d.ts +0 -11
  439. package/dist/lib/resolve-install-credentials.js +0 -53
  440. package/dist/lib/resolve-install-credentials.js.map +0 -1
  441. package/dist/lib/run-with-core.d.ts +0 -7
  442. package/dist/lib/run-with-core.js +0 -559
  443. package/dist/lib/run-with-core.js.map +0 -1
  444. package/dist/lib/safe-tools.d.ts +0 -2
  445. package/dist/lib/safe-tools.js +0 -212
  446. package/dist/lib/safe-tools.js.map +0 -1
  447. package/dist/lib/scaffold/index.d.ts +0 -1
  448. package/dist/lib/scaffold/index.js +0 -2
  449. package/dist/lib/scaffold/index.js.map +0 -1
  450. package/dist/lib/scaffold/scaffold.d.ts +0 -66
  451. package/dist/lib/scaffold/scaffold.js +0 -156
  452. package/dist/lib/scaffold/scaffold.js.map +0 -1
  453. package/dist/lib/settings.d.ts +0 -60
  454. package/dist/lib/settings.js +0 -31
  455. package/dist/lib/settings.js.map +0 -1
  456. package/dist/lib/staging-api.d.ts +0 -22
  457. package/dist/lib/staging-api.js +0 -74
  458. package/dist/lib/staging-api.js.map +0 -1
  459. package/dist/lib/startup-notice-gate.d.ts +0 -21
  460. package/dist/lib/startup-notice-gate.js +0 -29
  461. package/dist/lib/startup-notice-gate.js.map +0 -1
  462. package/dist/lib/telemetry-notice.d.ts +0 -25
  463. package/dist/lib/telemetry-notice.js +0 -58
  464. package/dist/lib/telemetry-notice.js.map +0 -1
  465. package/dist/lib/token-refresh-client.d.ts +0 -23
  466. package/dist/lib/token-refresh-client.js +0 -89
  467. package/dist/lib/token-refresh-client.js.map +0 -1
  468. package/dist/lib/token-refresh.d.ts +0 -12
  469. package/dist/lib/token-refresh.js +0 -27
  470. package/dist/lib/token-refresh.js.map +0 -1
  471. package/dist/lib/unclaimed-env-api.d.ts +0 -42
  472. package/dist/lib/unclaimed-env-api.js +0 -139
  473. package/dist/lib/unclaimed-env-api.js.map +0 -1
  474. package/dist/lib/unclaimed-env-provision.d.ts +0 -24
  475. package/dist/lib/unclaimed-env-provision.js +0 -80
  476. package/dist/lib/unclaimed-env-provision.js.map +0 -1
  477. package/dist/lib/unclaimed-warning.d.ts +0 -15
  478. package/dist/lib/unclaimed-warning.js +0 -78
  479. package/dist/lib/unclaimed-warning.js.map +0 -1
  480. package/dist/lib/validation/build-validator.d.ts +0 -21
  481. package/dist/lib/validation/build-validator.js +0 -153
  482. package/dist/lib/validation/build-validator.js.map +0 -1
  483. package/dist/lib/validation/index.d.ts +0 -4
  484. package/dist/lib/validation/index.js +0 -4
  485. package/dist/lib/validation/index.js.map +0 -1
  486. package/dist/lib/validation/quick-checks.d.ts +0 -19
  487. package/dist/lib/validation/quick-checks.js +0 -192
  488. package/dist/lib/validation/quick-checks.js.map +0 -1
  489. package/dist/lib/validation/security-checks.d.ts +0 -35
  490. package/dist/lib/validation/security-checks.js +0 -106
  491. package/dist/lib/validation/security-checks.js.map +0 -1
  492. package/dist/lib/validation/types.d.ts +0 -56
  493. package/dist/lib/validation/types.js +0 -2
  494. package/dist/lib/validation/types.js.map +0 -1
  495. package/dist/lib/validation/validator.d.ts +0 -13
  496. package/dist/lib/validation/validator.js +0 -711
  497. package/dist/lib/validation/validator.js.map +0 -1
  498. package/dist/lib/version-check.d.ts +0 -6
  499. package/dist/lib/version-check.js +0 -46
  500. package/dist/lib/version-check.js.map +0 -1
  501. package/dist/lib/workos-api.d.ts +0 -30
  502. package/dist/lib/workos-api.js +0 -69
  503. package/dist/lib/workos-api.js.map +0 -1
  504. package/dist/lib/workos-client.d.ts +0 -58
  505. package/dist/lib/workos-client.js +0 -140
  506. package/dist/lib/workos-client.js.map +0 -1
  507. package/dist/lib/workos-management.d.ts +0 -32
  508. package/dist/lib/workos-management.js +0 -149
  509. package/dist/lib/workos-management.js.map +0 -1
  510. package/dist/nextjs/nextjs-installer-agent.d.ts +0 -5
  511. package/dist/nextjs/nextjs-installer-agent.js +0 -6
  512. package/dist/nextjs/nextjs-installer-agent.js.map +0 -1
  513. package/dist/nextjs/utils.d.ts +0 -4
  514. package/dist/nextjs/utils.js +0 -5
  515. package/dist/nextjs/utils.js.map +0 -1
  516. package/dist/react/react-installer-agent.d.ts +0 -4
  517. package/dist/react/react-installer-agent.js +0 -5
  518. package/dist/react/react-installer-agent.js.map +0 -1
  519. package/dist/react-router/react-router-installer-agent.d.ts +0 -4
  520. package/dist/react-router/react-router-installer-agent.js +0 -5
  521. package/dist/react-router/react-router-installer-agent.js.map +0 -1
  522. package/dist/react-router/utils.d.ts +0 -4
  523. package/dist/react-router/utils.js +0 -5
  524. package/dist/react-router/utils.js.map +0 -1
  525. package/dist/run.d.ts +0 -33
  526. package/dist/run.js +0 -58
  527. package/dist/run.js.map +0 -1
  528. package/dist/smoke-test.ts +0 -881
  529. package/dist/steps/add-or-update-environment-variables.d.ts +0 -10
  530. package/dist/steps/add-or-update-environment-variables.js +0 -155
  531. package/dist/steps/add-or-update-environment-variables.js.map +0 -1
  532. package/dist/steps/index.d.ts +0 -3
  533. package/dist/steps/index.js +0 -4
  534. package/dist/steps/index.js.map +0 -1
  535. package/dist/steps/run-prettier.d.ts +0 -5
  536. package/dist/steps/run-prettier.js +0 -50
  537. package/dist/steps/run-prettier.js.map +0 -1
  538. package/dist/steps/upload-environment-variables/EnvironmentProvider.d.ts +0 -8
  539. package/dist/steps/upload-environment-variables/EnvironmentProvider.js +0 -7
  540. package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
  541. package/dist/steps/upload-environment-variables/index.d.ts +0 -6
  542. package/dist/steps/upload-environment-variables/index.js +0 -69
  543. package/dist/steps/upload-environment-variables/index.js.map +0 -1
  544. package/dist/steps/upload-environment-variables/providers/vercel.d.ts +0 -14
  545. package/dist/steps/upload-environment-variables/providers/vercel.js +0 -107
  546. package/dist/steps/upload-environment-variables/providers/vercel.js.map +0 -1
  547. package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +0 -4
  548. package/dist/tanstack-start/tanstack-start-installer-agent.js +0 -5
  549. package/dist/tanstack-start/tanstack-start-installer-agent.js.map +0 -1
  550. package/dist/telemetry.d.ts +0 -2
  551. package/dist/telemetry.js +0 -29
  552. package/dist/telemetry.js.map +0 -1
  553. package/dist/test/force-insecure-storage.d.ts +0 -1
  554. package/dist/test/force-insecure-storage.js +0 -9
  555. package/dist/test/force-insecure-storage.js.map +0 -1
  556. package/dist/test/setup.d.ts +0 -1
  557. package/dist/test/setup.js +0 -38
  558. package/dist/test/setup.js.map +0 -1
  559. package/dist/utils/analytics.d.ts +0 -66
  560. package/dist/utils/analytics.js +0 -330
  561. package/dist/utils/analytics.js.map +0 -1
  562. package/dist/utils/bash.d.ts +0 -2
  563. package/dist/utils/bash.js +0 -17
  564. package/dist/utils/bash.js.map +0 -1
  565. package/dist/utils/box.d.ts +0 -9
  566. package/dist/utils/box.js +0 -15
  567. package/dist/utils/box.js.map +0 -1
  568. package/dist/utils/cli-exit.d.ts +0 -15
  569. package/dist/utils/cli-exit.js +0 -11
  570. package/dist/utils/cli-exit.js.map +0 -1
  571. package/dist/utils/cli-symbols.d.ts +0 -44
  572. package/dist/utils/cli-symbols.js +0 -58
  573. package/dist/utils/cli-symbols.js.map +0 -1
  574. package/dist/utils/command-invocation.d.ts +0 -10
  575. package/dist/utils/command-invocation.js +0 -26
  576. package/dist/utils/command-invocation.js.map +0 -1
  577. package/dist/utils/command-telemetry.d.ts +0 -17
  578. package/dist/utils/command-telemetry.js +0 -67
  579. package/dist/utils/command-telemetry.js.map +0 -1
  580. package/dist/utils/crash-reporter.d.ts +0 -13
  581. package/dist/utils/crash-reporter.js +0 -91
  582. package/dist/utils/crash-reporter.js.map +0 -1
  583. package/dist/utils/debug.d.ts +0 -9
  584. package/dist/utils/debug.js +0 -105
  585. package/dist/utils/debug.js.map +0 -1
  586. package/dist/utils/env-parser.d.ts +0 -5
  587. package/dist/utils/env-parser.js +0 -18
  588. package/dist/utils/env-parser.js.map +0 -1
  589. package/dist/utils/environment.d.ts +0 -10
  590. package/dist/utils/environment.js +0 -69
  591. package/dist/utils/environment.js.map +0 -1
  592. package/dist/utils/errors.d.ts +0 -3
  593. package/dist/utils/errors.js +0 -7
  594. package/dist/utils/errors.js.map +0 -1
  595. package/dist/utils/exec-file.d.ts +0 -15
  596. package/dist/utils/exec-file.js +0 -39
  597. package/dist/utils/exec-file.js.map +0 -1
  598. package/dist/utils/exit-codes.d.ts +0 -31
  599. package/dist/utils/exit-codes.js +0 -69
  600. package/dist/utils/exit-codes.js.map +0 -1
  601. package/dist/utils/git-utils.d.ts +0 -23
  602. package/dist/utils/git-utils.js +0 -86
  603. package/dist/utils/git-utils.js.map +0 -1
  604. package/dist/utils/help-json.d.ts +0 -58
  605. package/dist/utils/help-json.js +0 -1577
  606. package/dist/utils/help-json.js.map +0 -1
  607. package/dist/utils/interaction-mode.d.ts +0 -25
  608. package/dist/utils/interaction-mode.js +0 -99
  609. package/dist/utils/interaction-mode.js.map +0 -1
  610. package/dist/utils/lock-art.d.ts +0 -4
  611. package/dist/utils/lock-art.js +0 -73
  612. package/dist/utils/lock-art.js.map +0 -1
  613. package/dist/utils/logging.d.ts +0 -9
  614. package/dist/utils/logging.js +0 -36
  615. package/dist/utils/logging.js.map +0 -1
  616. package/dist/utils/ndjson.d.ts +0 -16
  617. package/dist/utils/ndjson.js +0 -18
  618. package/dist/utils/ndjson.js.map +0 -1
  619. package/dist/utils/output.d.ts +0 -60
  620. package/dist/utils/output.js +0 -124
  621. package/dist/utils/output.js.map +0 -1
  622. package/dist/utils/package-json.d.ts +0 -26
  623. package/dist/utils/package-json.js +0 -32
  624. package/dist/utils/package-json.js.map +0 -1
  625. package/dist/utils/package-manager.d.ts +0 -21
  626. package/dist/utils/package-manager.js +0 -166
  627. package/dist/utils/package-manager.js.map +0 -1
  628. package/dist/utils/paths.d.ts +0 -5
  629. package/dist/utils/paths.js +0 -18
  630. package/dist/utils/paths.js.map +0 -1
  631. package/dist/utils/platform.d.ts +0 -8
  632. package/dist/utils/platform.js +0 -7
  633. package/dist/utils/platform.js.map +0 -1
  634. package/dist/utils/recovery-hints.d.ts +0 -42
  635. package/dist/utils/recovery-hints.js +0 -92
  636. package/dist/utils/recovery-hints.js.map +0 -1
  637. package/dist/utils/redact.d.ts +0 -5
  638. package/dist/utils/redact.js +0 -29
  639. package/dist/utils/redact.js.map +0 -1
  640. package/dist/utils/register-subcommand.d.ts +0 -10
  641. package/dist/utils/register-subcommand.js +0 -33
  642. package/dist/utils/register-subcommand.js.map +0 -1
  643. package/dist/utils/semver.d.ts +0 -10
  644. package/dist/utils/semver.js +0 -43
  645. package/dist/utils/semver.js.map +0 -1
  646. package/dist/utils/string.d.ts +0 -1
  647. package/dist/utils/string.js +0 -6
  648. package/dist/utils/string.js.map +0 -1
  649. package/dist/utils/summary-box.d.ts +0 -25
  650. package/dist/utils/summary-box.js +0 -211
  651. package/dist/utils/summary-box.js.map +0 -1
  652. package/dist/utils/table.d.ts +0 -5
  653. package/dist/utils/table.js +0 -18
  654. package/dist/utils/table.js.map +0 -1
  655. package/dist/utils/telemetry-client.d.ts +0 -43
  656. package/dist/utils/telemetry-client.js +0 -171
  657. package/dist/utils/telemetry-client.js.map +0 -1
  658. package/dist/utils/telemetry-store-forward.d.ts +0 -11
  659. package/dist/utils/telemetry-store-forward.js +0 -94
  660. package/dist/utils/telemetry-store-forward.js.map +0 -1
  661. package/dist/utils/telemetry-types.d.ts +0 -100
  662. package/dist/utils/telemetry-types.js +0 -6
  663. package/dist/utils/telemetry-types.js.map +0 -1
  664. package/dist/utils/types.d.ts +0 -123
  665. package/dist/utils/types.js +0 -2
  666. package/dist/utils/types.js.map +0 -1
  667. package/dist/utils/ui-utils.d.ts +0 -97
  668. package/dist/utils/ui-utils.js +0 -449
  669. package/dist/utils/ui-utils.js.map +0 -1
  670. package/dist/utils/ui.d.ts +0 -148
  671. package/dist/utils/ui.js +0 -368
  672. package/dist/utils/ui.js.map +0 -1
  673. package/dist/utils/urls.d.ts +0 -13
  674. package/dist/utils/urls.js +0 -14
  675. package/dist/utils/urls.js.map +0 -1
  676. package/dist/utils/vendor/is-unicorn-supported.d.ts +0 -1
  677. package/dist/utils/vendor/is-unicorn-supported.js +0 -21
  678. package/dist/utils/vendor/is-unicorn-supported.js.map +0 -1
  679. package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +0 -4
  680. package/dist/vanilla-js/vanilla-js-installer-agent.js +0 -5
  681. package/dist/vanilla-js/vanilla-js-installer-agent.js.map +0 -1
@@ -1,406 +0,0 @@
1
- import chalk from 'chalk';
2
- import ui from '../utils/ui.js';
3
- import { getCredentials, saveCredentials, clearCredentials, isTokenExpired, diagnoseCredentials, getCredentialsPath, setInsecureStorage, } from '../lib/credentials.js';
4
- import { getConfig, saveConfig, clearConfig, getConfigPath, setInsecureConfigStorage, diagnoseConfig, } from '../lib/config-store.js';
5
- import { clearPreferences, getPreferencesPath, getTelemetrySource, isNoticeShown, isTelemetryEnabled, isTelemetryOptedOut, } from '../lib/preferences.js';
6
- import { isJsonMode, outputJson, exitWithError } from '../utils/output.js';
7
- import { isPromptAllowed } from '../utils/interaction-mode.js';
8
- function maskSecret(value) {
9
- if (!value)
10
- return undefined;
11
- if (value.length <= 8)
12
- return '****';
13
- return value.slice(0, 4) + '****' + value.slice(-4);
14
- }
15
- function formatTimeRemaining(ms) {
16
- if (ms <= 0)
17
- return 'expired';
18
- const seconds = Math.floor(ms / 1000);
19
- const minutes = Math.floor(seconds / 60);
20
- const hours = Math.floor(minutes / 60);
21
- if (hours > 0)
22
- return `${hours}h ${minutes % 60}m`;
23
- if (minutes > 0)
24
- return `${minutes}m ${seconds % 60}s`;
25
- return `${seconds}s`;
26
- }
27
- function parseJwt(token) {
28
- try {
29
- const parts = token.split('.');
30
- if (parts.length !== 3)
31
- return null;
32
- return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));
33
- }
34
- catch {
35
- return null;
36
- }
37
- }
38
- function determineCredentialSource(diagnostics) {
39
- const hasKeyring = diagnostics.some((l) => l.startsWith('keyring: found'));
40
- const hasFile = diagnostics.some((l) => l.includes('exists=true'));
41
- const isInsecure = diagnostics.some((l) => l.includes('insecureStorage=true'));
42
- if (isInsecure)
43
- return hasFile ? 'file' : 'none';
44
- if (hasKeyring)
45
- return 'keyring';
46
- if (hasFile)
47
- return 'file';
48
- return 'none';
49
- }
50
- // --- debug state ---
51
- export async function runDebugState({ showSecrets }) {
52
- const creds = getCredentials();
53
- const config = getConfig();
54
- const diagnostics = diagnoseCredentials();
55
- const credSource = determineCredentialSource(diagnostics);
56
- const maybeRedact = showSecrets ? (v) => v : maskSecret;
57
- const credentialsOutput = { present: !!creds, source: credSource };
58
- if (creds) {
59
- const timeRemaining = creds.expiresAt - Date.now();
60
- const expired = isTokenExpired(creds);
61
- Object.assign(credentialsOutput, {
62
- userId: creds.userId,
63
- email: creds.email ?? null,
64
- accessToken: maybeRedact(creds.accessToken),
65
- refreshToken: creds.refreshToken ? 'present' : 'absent',
66
- expiresAt: creds.expiresAt,
67
- expiresIn: expired
68
- ? `expired ${formatTimeRemaining(-timeRemaining)} ago`
69
- : `in ${formatTimeRemaining(timeRemaining)}`,
70
- isExpired: expired,
71
- });
72
- if (creds.staging) {
73
- credentialsOutput.staging = {
74
- clientId: creds.staging.clientId,
75
- apiKey: maybeRedact(creds.staging.apiKey),
76
- fetchedAt: creds.staging.fetchedAt,
77
- };
78
- }
79
- }
80
- const configOutput = { present: !!config };
81
- if (config) {
82
- configOutput.activeEnvironment = config.activeEnvironment ?? null;
83
- configOutput.environments = Object.fromEntries(Object.entries(config.environments).map(([key, env]) => [
84
- key,
85
- {
86
- name: env.name,
87
- type: env.type,
88
- apiKey: maybeRedact(env.apiKey),
89
- clientId: env.clientId ?? null,
90
- endpoint: env.endpoint ?? null,
91
- ...(env.type === 'unclaimed' && { claimToken: maybeRedact(env.claimToken) }),
92
- },
93
- ]));
94
- }
95
- const configDiagnostics = diagnoseConfig();
96
- const configSource = determineCredentialSource(configDiagnostics);
97
- configOutput.source = configSource;
98
- const telemetryOutput = {
99
- enabled: isTelemetryEnabled(),
100
- optedOut: isTelemetryOptedOut(),
101
- source: getTelemetrySource(),
102
- noticeShown: isNoticeShown(),
103
- };
104
- const result = {
105
- credentials: credentialsOutput,
106
- config: configOutput,
107
- telemetry: telemetryOutput,
108
- storage: {
109
- credentialsPath: getCredentialsPath(),
110
- configPath: getConfigPath(),
111
- preferencesPath: getPreferencesPath(),
112
- credentialDiagnostics: diagnostics,
113
- configDiagnostics,
114
- },
115
- };
116
- if (isJsonMode()) {
117
- outputJson(result);
118
- return;
119
- }
120
- console.log(chalk.bold('Credentials'));
121
- console.log(` present: ${creds ? chalk.green('true') : chalk.yellow('false')}`);
122
- console.log(` source: ${credSource}`);
123
- if (creds) {
124
- console.log(` userId: ${creds.userId}`);
125
- console.log(` email: ${creds.email ?? chalk.dim('none')}`);
126
- console.log(` token: ${maybeRedact(creds.accessToken)}`);
127
- console.log(` refresh: ${creds.refreshToken ? 'present' : 'absent'}`);
128
- const expired = isTokenExpired(creds);
129
- const timeRemaining = creds.expiresAt - Date.now();
130
- console.log(` expires: ${expired ? chalk.red(`expired ${formatTimeRemaining(-timeRemaining)} ago`) : chalk.green(`in ${formatTimeRemaining(timeRemaining)}`)}`);
131
- if (creds.staging) {
132
- console.log(` staging: clientId=${creds.staging.clientId} apiKey=${maybeRedact(creds.staging.apiKey)}`);
133
- }
134
- }
135
- console.log();
136
- console.log(chalk.bold('Config'));
137
- console.log(` present: ${config ? chalk.green('true') : chalk.yellow('false')}`);
138
- console.log(` source: ${configSource}`);
139
- if (config) {
140
- console.log(` active: ${config.activeEnvironment ?? chalk.dim('none')}`);
141
- for (const [key, env] of Object.entries(config.environments)) {
142
- console.log(` env[${key}]: type=${env.type} apiKey=${maybeRedact(env.apiKey)}`);
143
- if (env.type === 'unclaimed')
144
- console.log(` claimToken=${maybeRedact(env.claimToken)}`);
145
- }
146
- }
147
- console.log();
148
- console.log(chalk.bold('Telemetry'));
149
- console.log(` enabled: ${telemetryOutput.enabled ? chalk.green('true') : chalk.yellow('false')}`);
150
- console.log(` optedOut: ${telemetryOutput.optedOut ? chalk.yellow('true') : 'false'}`);
151
- console.log(` source: ${telemetryOutput.source}`);
152
- console.log(` notice: ${telemetryOutput.noticeShown ? 'shown' : chalk.dim('not shown')}`);
153
- console.log();
154
- console.log(chalk.bold('Storage — Credentials'));
155
- console.log(` path: ${getCredentialsPath()}`);
156
- for (const line of diagnostics) {
157
- console.log(` ${chalk.dim(line)}`);
158
- }
159
- console.log();
160
- console.log(chalk.bold('Storage — Config'));
161
- console.log(` path: ${getConfigPath()}`);
162
- for (const line of configDiagnostics) {
163
- console.log(` ${chalk.dim(line)}`);
164
- }
165
- console.log();
166
- console.log(chalk.bold('Storage — Preferences'));
167
- console.log(` path: ${getPreferencesPath()}`);
168
- }
169
- // --- debug reset ---
170
- /** Join names with an Oxford comma: ["a","b","c"] => "a, b, and c". */
171
- function formatList(items) {
172
- if (items.length <= 1)
173
- return items.join('');
174
- if (items.length === 2)
175
- return `${items[0]} and ${items[1]}`;
176
- return `${items.slice(0, -1).join(', ')}, and ${items[items.length - 1]}`;
177
- }
178
- export async function runDebugReset({ force, credentialsOnly, configOnly, }) {
179
- // Both flags = clear both (same as neither)
180
- const clearCreds = !configOnly || credentialsOnly;
181
- const clearConf = !credentialsOnly || configOnly;
182
- // Preferences (~/.workos/preferences.json) are non-secret local CLI state, so
183
- // they ride with the config target. Clearing config returns the CLI to a
184
- // fresh-install state, which includes resetting the telemetry preference.
185
- const clearPrefs = clearConf;
186
- const targets = formatList([clearCreds && 'credentials', clearConf && 'config', clearPrefs && 'preferences'].filter(Boolean));
187
- if (!force) {
188
- if (!isPromptAllowed()) {
189
- exitWithError({
190
- code: 'non_interactive_reset',
191
- message: 'Use --force to reset in agent or CI mode',
192
- });
193
- }
194
- const confirmed = await ui.confirm({
195
- message: `Clear all ${targets}? This cannot be undone.`,
196
- });
197
- if (ui.isCancel(confirmed) || !confirmed) {
198
- if (isJsonMode()) {
199
- outputJson({ cleared: false, cancelled: true });
200
- }
201
- else {
202
- ui.log.info('Reset cancelled');
203
- }
204
- return;
205
- }
206
- }
207
- if (clearCreds)
208
- clearCredentials();
209
- if (clearConf)
210
- clearConfig();
211
- if (clearPrefs)
212
- clearPreferences();
213
- if (isJsonMode()) {
214
- outputJson({ cleared: true, credentials: clearCreds, config: clearConf, preferences: clearPrefs });
215
- }
216
- else {
217
- ui.log.success(`Cleared ${targets}`);
218
- }
219
- }
220
- // --- debug simulate ---
221
- export async function runDebugSimulate({ expiredToken, noKeyring, unclaimed, noAuth, crash = false, }) {
222
- // Simulate an unexpected crash to exercise the crash-telemetry pipeline
223
- // end-to-end. Throws a plain Error (not CliExit) so the bin.ts lifecycle
224
- // records a `crash` event with a sanitized stack rather than a handled exit.
225
- if (crash) {
226
- throw new Error('Simulated crash for telemetry verification');
227
- }
228
- // Validate: at least one flag
229
- if (!expiredToken && !noKeyring && !unclaimed && !noAuth) {
230
- exitWithError({
231
- code: 'no_simulation_flags',
232
- message: 'Specify at least one simulation flag: --expired-token, --no-keyring, --unclaimed, --no-auth',
233
- });
234
- }
235
- // Validate: contradictory
236
- if (expiredToken && noAuth) {
237
- exitWithError({
238
- code: 'contradictory_flags',
239
- message: "Cannot combine --expired-token and --no-auth (can't expire a cleared token)",
240
- });
241
- }
242
- const actions = [];
243
- // Apply in order: storage tier first, then credential mutations, then config mutations
244
- if (noKeyring) {
245
- // Migrate current state to file storage
246
- const creds = getCredentials();
247
- const config = getConfig();
248
- setInsecureStorage(true);
249
- setInsecureConfigStorage(true);
250
- if (creds)
251
- saveCredentials(creds);
252
- if (config)
253
- saveConfig(config);
254
- actions.push('Forced file-only storage (keyring bypassed)');
255
- }
256
- if (expiredToken) {
257
- const creds = getCredentials();
258
- if (!creds) {
259
- exitWithError({
260
- code: 'no_credentials',
261
- message: 'Cannot simulate expired token — no credentials found. Log in first.',
262
- });
263
- }
264
- saveCredentials({ ...creds, expiresAt: Date.now() - 60_000 });
265
- actions.push('Set token expiresAt to 1 minute ago');
266
- }
267
- if (noAuth) {
268
- clearCredentials();
269
- actions.push('Cleared credentials (config preserved)');
270
- }
271
- if (unclaimed) {
272
- const config = getConfig() ?? { environments: {} };
273
- const envName = 'simulated-unclaimed';
274
- config.environments[envName] = {
275
- name: envName,
276
- type: 'unclaimed',
277
- apiKey: 'sk_test_simulated_unclaimed_000000000000',
278
- clientId: 'client_simulated',
279
- claimToken: 'claim_simulated_token_000000000000',
280
- };
281
- config.activeEnvironment = envName;
282
- saveConfig(config);
283
- actions.push(`Created unclaimed environment "${envName}" and set as active`);
284
- }
285
- if (isJsonMode()) {
286
- outputJson({ simulated: true, actions });
287
- }
288
- else {
289
- for (const action of actions) {
290
- ui.log.success(action);
291
- }
292
- }
293
- }
294
- /**
295
- * Catalog of WORKOS_-prefixed environment variables the CLI reads.
296
- *
297
- * This is the single source of truth for `workos debug env`. A unit test
298
- * (env-var-catalog.spec.ts) scans the source for `process.env.WORKOS_*` reads
299
- * and fails if any are missing here, so this list can't silently drift.
300
- */
301
- export const ENV_VAR_CATALOG = [
302
- // Credentials
303
- { name: 'WORKOS_API_KEY', effect: 'Bypasses credential resolution — used directly for API calls' },
304
- { name: 'WORKOS_CLIENT_ID', effect: 'WorkOS client ID used during credential resolution' },
305
- // Interaction & output
306
- { name: 'WORKOS_MODE', effect: 'Controls interaction behavior: human, agent, or CI' },
307
- { name: 'WORKOS_AGENT', effect: 'Set to "1" to force agent interaction mode' },
308
- { name: 'WORKOS_FORCE_TTY', effect: 'Forces human (non-JSON) output mode, even when piped' },
309
- { name: 'WORKOS_DEBUG', effect: 'Set to "1" to enable verbose debug logging for all commands' },
310
- { name: 'WORKOS_TELEMETRY', effect: 'Set to "false" to disable telemetry' },
311
- // URLs (WORKOS_API_URL is the single base; gateway + telemetry derive from it)
312
- {
313
- name: 'WORKOS_API_URL',
314
- effect: 'Overrides API base URL; also reroutes the LLM gateway and CLI telemetry endpoints',
315
- },
316
- { name: 'WORKOS_DASHBOARD_URL', effect: 'Overrides dashboard URL (default: https://dashboard.workos.com)' },
317
- { name: 'WORKOS_AUTHKIT_DOMAIN', effect: 'Overrides AuthKit domain from settings' },
318
- { name: 'WORKOS_BASE_URL', effect: 'AuthKit base URL, read during doctor environment checks' },
319
- { name: 'WORKOS_REDIRECT_URI', effect: 'OAuth redirect URI, read during doctor environment checks' },
320
- { name: 'WORKOS_COOKIE_DOMAIN', effect: 'Session cookie domain, read during doctor environment checks' },
321
- // Development
322
- { name: 'WORKOS_DEV', effect: 'Enables dev mode — loads .env.local at startup' },
323
- { name: 'WORKOS_DISABLE_PROXY', effect: 'Disables the credential proxy for gateway auth' },
324
- ];
325
- export async function runDebugEnv() {
326
- const vars = ENV_VAR_CATALOG.map(({ name, effect }) => ({
327
- name,
328
- value: process.env[name],
329
- effect,
330
- }));
331
- const setVars = vars.filter((v) => v.value !== undefined);
332
- const unsetVars = vars.filter((v) => v.value === undefined);
333
- if (isJsonMode()) {
334
- outputJson({
335
- variables: Object.fromEntries(vars.map((v) => [v.name, { value: v.value ?? null, effect: v.effect }])),
336
- set: setVars.map((v) => v.name),
337
- unset: unsetVars.map((v) => v.name),
338
- });
339
- return;
340
- }
341
- if (setVars.length > 0) {
342
- console.log(chalk.bold('Set'));
343
- for (const v of setVars) {
344
- console.log(` ${chalk.green(v.name)}=${v.value}`);
345
- console.log(` ${chalk.dim(v.effect)}`);
346
- }
347
- console.log();
348
- }
349
- console.log(chalk.bold(`Unset${setVars.length > 0 ? '' : ' (none active)'}`));
350
- for (const v of unsetVars) {
351
- console.log(` ${chalk.dim(v.name)} — ${chalk.dim(v.effect)}`);
352
- }
353
- }
354
- // --- debug token ---
355
- export async function runDebugToken() {
356
- const creds = getCredentials();
357
- if (!creds) {
358
- if (isJsonMode()) {
359
- outputJson({ present: false });
360
- }
361
- else {
362
- console.log(chalk.yellow('No credentials found'));
363
- }
364
- return;
365
- }
366
- const claims = parseJwt(creds.accessToken);
367
- const expired = isTokenExpired(creds);
368
- const timeRemaining = creds.expiresAt - Date.now();
369
- if (isJsonMode()) {
370
- outputJson({
371
- present: true,
372
- format: claims ? 'jwt' : 'opaque',
373
- expired,
374
- expiresAt: creds.expiresAt,
375
- expiresIn: expired
376
- ? `expired ${formatTimeRemaining(-timeRemaining)} ago`
377
- : `in ${formatTimeRemaining(timeRemaining)}`,
378
- claims: claims ?? null,
379
- refreshToken: { present: !!creds.refreshToken },
380
- });
381
- return;
382
- }
383
- if (claims) {
384
- console.log(chalk.bold('JWT Token'));
385
- console.log(` expires: ${expired ? chalk.red(`expired ${formatTimeRemaining(-timeRemaining)} ago`) : chalk.green(`in ${formatTimeRemaining(timeRemaining)}`)}`);
386
- console.log();
387
- console.log(chalk.bold('Claims'));
388
- for (const [key, value] of Object.entries(claims)) {
389
- if (key === 'exp' || key === 'iat' || key === 'nbf') {
390
- const date = new Date(value * 1000).toISOString();
391
- console.log(` ${key}: ${value} (${date})`);
392
- }
393
- else {
394
- console.log(` ${key}: ${JSON.stringify(value)}`);
395
- }
396
- }
397
- }
398
- else {
399
- console.log(chalk.bold('Opaque Token'));
400
- console.log(chalk.dim(' Token is not a JWT — cannot decode claims'));
401
- console.log(` expires: ${expired ? chalk.red(`expired ${formatTimeRemaining(-timeRemaining)} ago`) : chalk.green(`in ${formatTimeRemaining(timeRemaining)}`)}`);
402
- }
403
- console.log();
404
- console.log(` refresh token: ${creds.refreshToken ? chalk.green('present') : chalk.yellow('absent')}`);
405
- }
406
- //# sourceMappingURL=debug.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport ui from '../utils/ui.js';\nimport {\n getCredentials,\n saveCredentials,\n clearCredentials,\n isTokenExpired,\n diagnoseCredentials,\n getCredentialsPath,\n setInsecureStorage,\n} from '../lib/credentials.js';\nimport {\n getConfig,\n saveConfig,\n clearConfig,\n getConfigPath,\n setInsecureConfigStorage,\n diagnoseConfig,\n} from '../lib/config-store.js';\nimport {\n clearPreferences,\n getPreferencesPath,\n getTelemetrySource,\n isNoticeShown,\n isTelemetryEnabled,\n isTelemetryOptedOut,\n} from '../lib/preferences.js';\nimport { isJsonMode, outputJson, exitWithError } from '../utils/output.js';\nimport { isPromptAllowed } from '../utils/interaction-mode.js';\n\nfunction maskSecret(value: string | undefined): string | undefined {\n if (!value) return undefined;\n if (value.length <= 8) return '****';\n return value.slice(0, 4) + '****' + value.slice(-4);\n}\n\nfunction formatTimeRemaining(ms: number): string {\n if (ms <= 0) return 'expired';\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n if (hours > 0) return `${hours}h ${minutes % 60}m`;\n if (minutes > 0) return `${minutes}m ${seconds % 60}s`;\n return `${seconds}s`;\n}\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\nfunction determineCredentialSource(diagnostics: string[]): 'keyring' | 'file' | 'none' {\n const hasKeyring = diagnostics.some((l) => l.startsWith('keyring: found'));\n const hasFile = diagnostics.some((l) => l.includes('exists=true'));\n const isInsecure = diagnostics.some((l) => l.includes('insecureStorage=true'));\n\n if (isInsecure) return hasFile ? 'file' : 'none';\n if (hasKeyring) return 'keyring';\n if (hasFile) return 'file';\n return 'none';\n}\n\n// --- debug state ---\n\nexport async function runDebugState({ showSecrets }: { showSecrets: boolean }): Promise<void> {\n const creds = getCredentials();\n const config = getConfig();\n const diagnostics = diagnoseCredentials();\n const credSource = determineCredentialSource(diagnostics);\n const maybeRedact = showSecrets ? (v: string | undefined) => v : maskSecret;\n\n const credentialsOutput: Record<string, unknown> = { present: !!creds, source: credSource };\n\n if (creds) {\n const timeRemaining = creds.expiresAt - Date.now();\n const expired = isTokenExpired(creds);\n Object.assign(credentialsOutput, {\n userId: creds.userId,\n email: creds.email ?? null,\n accessToken: maybeRedact(creds.accessToken),\n refreshToken: creds.refreshToken ? 'present' : 'absent',\n expiresAt: creds.expiresAt,\n expiresIn: expired\n ? `expired ${formatTimeRemaining(-timeRemaining)} ago`\n : `in ${formatTimeRemaining(timeRemaining)}`,\n isExpired: expired,\n });\n if (creds.staging) {\n credentialsOutput.staging = {\n clientId: creds.staging.clientId,\n apiKey: maybeRedact(creds.staging.apiKey),\n fetchedAt: creds.staging.fetchedAt,\n };\n }\n }\n\n const configOutput: Record<string, unknown> = { present: !!config };\n\n if (config) {\n configOutput.activeEnvironment = config.activeEnvironment ?? null;\n configOutput.environments = Object.fromEntries(\n Object.entries(config.environments).map(([key, env]) => [\n key,\n {\n name: env.name,\n type: env.type,\n apiKey: maybeRedact(env.apiKey),\n clientId: env.clientId ?? null,\n endpoint: env.endpoint ?? null,\n ...(env.type === 'unclaimed' && { claimToken: maybeRedact(env.claimToken) }),\n },\n ]),\n );\n }\n\n const configDiagnostics = diagnoseConfig();\n const configSource = determineCredentialSource(configDiagnostics);\n configOutput.source = configSource;\n\n const telemetryOutput = {\n enabled: isTelemetryEnabled(),\n optedOut: isTelemetryOptedOut(),\n source: getTelemetrySource(),\n noticeShown: isNoticeShown(),\n };\n\n const result = {\n credentials: credentialsOutput,\n config: configOutput,\n telemetry: telemetryOutput,\n storage: {\n credentialsPath: getCredentialsPath(),\n configPath: getConfigPath(),\n preferencesPath: getPreferencesPath(),\n credentialDiagnostics: diagnostics,\n configDiagnostics,\n },\n };\n\n if (isJsonMode()) {\n outputJson(result);\n return;\n }\n\n console.log(chalk.bold('Credentials'));\n console.log(` present: ${creds ? chalk.green('true') : chalk.yellow('false')}`);\n console.log(` source: ${credSource}`);\n if (creds) {\n console.log(` userId: ${creds.userId}`);\n console.log(` email: ${creds.email ?? chalk.dim('none')}`);\n console.log(` token: ${maybeRedact(creds.accessToken)}`);\n console.log(` refresh: ${creds.refreshToken ? 'present' : 'absent'}`);\n const expired = isTokenExpired(creds);\n const timeRemaining = creds.expiresAt - Date.now();\n console.log(\n ` expires: ${expired ? chalk.red(`expired ${formatTimeRemaining(-timeRemaining)} ago`) : chalk.green(`in ${formatTimeRemaining(timeRemaining)}`)}`,\n );\n if (creds.staging) {\n console.log(` staging: clientId=${creds.staging.clientId} apiKey=${maybeRedact(creds.staging.apiKey)}`);\n }\n }\n\n console.log();\n console.log(chalk.bold('Config'));\n console.log(` present: ${config ? chalk.green('true') : chalk.yellow('false')}`);\n console.log(` source: ${configSource}`);\n if (config) {\n console.log(` active: ${config.activeEnvironment ?? chalk.dim('none')}`);\n for (const [key, env] of Object.entries(config.environments)) {\n console.log(` env[${key}]: type=${env.type} apiKey=${maybeRedact(env.apiKey)}`);\n if (env.type === 'unclaimed') console.log(` claimToken=${maybeRedact(env.claimToken)}`);\n }\n }\n\n console.log();\n console.log(chalk.bold('Telemetry'));\n console.log(` enabled: ${telemetryOutput.enabled ? chalk.green('true') : chalk.yellow('false')}`);\n console.log(` optedOut: ${telemetryOutput.optedOut ? chalk.yellow('true') : 'false'}`);\n console.log(` source: ${telemetryOutput.source}`);\n console.log(` notice: ${telemetryOutput.noticeShown ? 'shown' : chalk.dim('not shown')}`);\n\n console.log();\n console.log(chalk.bold('Storage — Credentials'));\n console.log(` path: ${getCredentialsPath()}`);\n for (const line of diagnostics) {\n console.log(` ${chalk.dim(line)}`);\n }\n\n console.log();\n console.log(chalk.bold('Storage — Config'));\n console.log(` path: ${getConfigPath()}`);\n for (const line of configDiagnostics) {\n console.log(` ${chalk.dim(line)}`);\n }\n\n console.log();\n console.log(chalk.bold('Storage — Preferences'));\n console.log(` path: ${getPreferencesPath()}`);\n}\n\n// --- debug reset ---\n\n/** Join names with an Oxford comma: [\"a\",\"b\",\"c\"] => \"a, b, and c\". */\nfunction formatList(items: string[]): string {\n if (items.length <= 1) return items.join('');\n if (items.length === 2) return `${items[0]} and ${items[1]}`;\n return `${items.slice(0, -1).join(', ')}, and ${items[items.length - 1]}`;\n}\n\nexport async function runDebugReset({\n force,\n credentialsOnly,\n configOnly,\n}: {\n force: boolean;\n credentialsOnly: boolean;\n configOnly: boolean;\n}): Promise<void> {\n // Both flags = clear both (same as neither)\n const clearCreds = !configOnly || credentialsOnly;\n const clearConf = !credentialsOnly || configOnly;\n // Preferences (~/.workos/preferences.json) are non-secret local CLI state, so\n // they ride with the config target. Clearing config returns the CLI to a\n // fresh-install state, which includes resetting the telemetry preference.\n const clearPrefs = clearConf;\n\n const targets = formatList(\n [clearCreds && 'credentials', clearConf && 'config', clearPrefs && 'preferences'].filter(Boolean) as string[],\n );\n\n if (!force) {\n if (!isPromptAllowed()) {\n exitWithError({\n code: 'non_interactive_reset',\n message: 'Use --force to reset in agent or CI mode',\n });\n }\n\n const confirmed = await ui.confirm({\n message: `Clear all ${targets}? This cannot be undone.`,\n });\n\n if (ui.isCancel(confirmed) || !confirmed) {\n if (isJsonMode()) {\n outputJson({ cleared: false, cancelled: true });\n } else {\n ui.log.info('Reset cancelled');\n }\n return;\n }\n }\n\n if (clearCreds) clearCredentials();\n if (clearConf) clearConfig();\n if (clearPrefs) clearPreferences();\n\n if (isJsonMode()) {\n outputJson({ cleared: true, credentials: clearCreds, config: clearConf, preferences: clearPrefs });\n } else {\n ui.log.success(`Cleared ${targets}`);\n }\n}\n\n// --- debug simulate ---\n\nexport async function runDebugSimulate({\n expiredToken,\n noKeyring,\n unclaimed,\n noAuth,\n crash = false,\n}: {\n expiredToken: boolean;\n noKeyring: boolean;\n unclaimed: boolean;\n noAuth: boolean;\n crash?: boolean;\n}): Promise<void> {\n // Simulate an unexpected crash to exercise the crash-telemetry pipeline\n // end-to-end. Throws a plain Error (not CliExit) so the bin.ts lifecycle\n // records a `crash` event with a sanitized stack rather than a handled exit.\n if (crash) {\n throw new Error('Simulated crash for telemetry verification');\n }\n\n // Validate: at least one flag\n if (!expiredToken && !noKeyring && !unclaimed && !noAuth) {\n exitWithError({\n code: 'no_simulation_flags',\n message: 'Specify at least one simulation flag: --expired-token, --no-keyring, --unclaimed, --no-auth',\n });\n }\n\n // Validate: contradictory\n if (expiredToken && noAuth) {\n exitWithError({\n code: 'contradictory_flags',\n message: \"Cannot combine --expired-token and --no-auth (can't expire a cleared token)\",\n });\n }\n\n const actions: string[] = [];\n\n // Apply in order: storage tier first, then credential mutations, then config mutations\n\n if (noKeyring) {\n // Migrate current state to file storage\n const creds = getCredentials();\n const config = getConfig();\n\n setInsecureStorage(true);\n setInsecureConfigStorage(true);\n\n if (creds) saveCredentials(creds);\n if (config) saveConfig(config);\n\n actions.push('Forced file-only storage (keyring bypassed)');\n }\n\n if (expiredToken) {\n const creds = getCredentials();\n if (!creds) {\n exitWithError({\n code: 'no_credentials',\n message: 'Cannot simulate expired token — no credentials found. Log in first.',\n });\n }\n saveCredentials({ ...creds, expiresAt: Date.now() - 60_000 });\n actions.push('Set token expiresAt to 1 minute ago');\n }\n\n if (noAuth) {\n clearCredentials();\n actions.push('Cleared credentials (config preserved)');\n }\n\n if (unclaimed) {\n const config = getConfig() ?? { environments: {} };\n const envName = 'simulated-unclaimed';\n config.environments[envName] = {\n name: envName,\n type: 'unclaimed',\n apiKey: 'sk_test_simulated_unclaimed_000000000000',\n clientId: 'client_simulated',\n claimToken: 'claim_simulated_token_000000000000',\n };\n config.activeEnvironment = envName;\n saveConfig(config);\n actions.push(`Created unclaimed environment \"${envName}\" and set as active`);\n }\n\n if (isJsonMode()) {\n outputJson({ simulated: true, actions });\n } else {\n for (const action of actions) {\n ui.log.success(action);\n }\n }\n}\n\n// --- debug env ---\n\ninterface EnvVarInfo {\n name: string;\n value: string | undefined;\n effect: string;\n}\n\n/**\n * Catalog of WORKOS_-prefixed environment variables the CLI reads.\n *\n * This is the single source of truth for `workos debug env`. A unit test\n * (env-var-catalog.spec.ts) scans the source for `process.env.WORKOS_*` reads\n * and fails if any are missing here, so this list can't silently drift.\n */\nexport const ENV_VAR_CATALOG: { name: string; effect: string }[] = [\n // Credentials\n { name: 'WORKOS_API_KEY', effect: 'Bypasses credential resolution — used directly for API calls' },\n { name: 'WORKOS_CLIENT_ID', effect: 'WorkOS client ID used during credential resolution' },\n // Interaction & output\n { name: 'WORKOS_MODE', effect: 'Controls interaction behavior: human, agent, or CI' },\n { name: 'WORKOS_AGENT', effect: 'Set to \"1\" to force agent interaction mode' },\n { name: 'WORKOS_FORCE_TTY', effect: 'Forces human (non-JSON) output mode, even when piped' },\n { name: 'WORKOS_DEBUG', effect: 'Set to \"1\" to enable verbose debug logging for all commands' },\n { name: 'WORKOS_TELEMETRY', effect: 'Set to \"false\" to disable telemetry' },\n // URLs (WORKOS_API_URL is the single base; gateway + telemetry derive from it)\n {\n name: 'WORKOS_API_URL',\n effect: 'Overrides API base URL; also reroutes the LLM gateway and CLI telemetry endpoints',\n },\n { name: 'WORKOS_DASHBOARD_URL', effect: 'Overrides dashboard URL (default: https://dashboard.workos.com)' },\n { name: 'WORKOS_AUTHKIT_DOMAIN', effect: 'Overrides AuthKit domain from settings' },\n { name: 'WORKOS_BASE_URL', effect: 'AuthKit base URL, read during doctor environment checks' },\n { name: 'WORKOS_REDIRECT_URI', effect: 'OAuth redirect URI, read during doctor environment checks' },\n { name: 'WORKOS_COOKIE_DOMAIN', effect: 'Session cookie domain, read during doctor environment checks' },\n // Development\n { name: 'WORKOS_DEV', effect: 'Enables dev mode — loads .env.local at startup' },\n { name: 'WORKOS_DISABLE_PROXY', effect: 'Disables the credential proxy for gateway auth' },\n];\n\nexport async function runDebugEnv(): Promise<void> {\n const vars: EnvVarInfo[] = ENV_VAR_CATALOG.map(({ name, effect }) => ({\n name,\n value: process.env[name],\n effect,\n }));\n\n const setVars = vars.filter((v) => v.value !== undefined);\n const unsetVars = vars.filter((v) => v.value === undefined);\n\n if (isJsonMode()) {\n outputJson({\n variables: Object.fromEntries(vars.map((v) => [v.name, { value: v.value ?? null, effect: v.effect }])),\n set: setVars.map((v) => v.name),\n unset: unsetVars.map((v) => v.name),\n });\n return;\n }\n\n if (setVars.length > 0) {\n console.log(chalk.bold('Set'));\n for (const v of setVars) {\n console.log(` ${chalk.green(v.name)}=${v.value}`);\n console.log(` ${chalk.dim(v.effect)}`);\n }\n console.log();\n }\n\n console.log(chalk.bold(`Unset${setVars.length > 0 ? '' : ' (none active)'}`));\n for (const v of unsetVars) {\n console.log(` ${chalk.dim(v.name)} — ${chalk.dim(v.effect)}`);\n }\n}\n\n// --- debug token ---\n\nexport async function runDebugToken(): Promise<void> {\n const creds = getCredentials();\n\n if (!creds) {\n if (isJsonMode()) {\n outputJson({ present: false });\n } else {\n console.log(chalk.yellow('No credentials found'));\n }\n return;\n }\n\n const claims = parseJwt(creds.accessToken);\n const expired = isTokenExpired(creds);\n const timeRemaining = creds.expiresAt - Date.now();\n\n if (isJsonMode()) {\n outputJson({\n present: true,\n format: claims ? 'jwt' : 'opaque',\n expired,\n expiresAt: creds.expiresAt,\n expiresIn: expired\n ? `expired ${formatTimeRemaining(-timeRemaining)} ago`\n : `in ${formatTimeRemaining(timeRemaining)}`,\n claims: claims ?? null,\n refreshToken: { present: !!creds.refreshToken },\n });\n return;\n }\n\n if (claims) {\n console.log(chalk.bold('JWT Token'));\n console.log(\n ` expires: ${expired ? chalk.red(`expired ${formatTimeRemaining(-timeRemaining)} ago`) : chalk.green(`in ${formatTimeRemaining(timeRemaining)}`)}`,\n );\n console.log();\n console.log(chalk.bold('Claims'));\n for (const [key, value] of Object.entries(claims)) {\n if (key === 'exp' || key === 'iat' || key === 'nbf') {\n const date = new Date((value as number) * 1000).toISOString();\n console.log(` ${key}: ${value} (${date})`);\n } else {\n console.log(` ${key}: ${JSON.stringify(value)}`);\n }\n }\n } else {\n console.log(chalk.bold('Opaque Token'));\n console.log(chalk.dim(' Token is not a JWT — cannot decode claims'));\n console.log(\n ` expires: ${expired ? chalk.red(`expired ${formatTimeRemaining(-timeRemaining)} ago`) : chalk.green(`in ${formatTimeRemaining(timeRemaining)}`)}`,\n );\n }\n\n console.log();\n console.log(` refresh token: ${creds.refreshToken ? chalk.green('present') : chalk.yellow('absent')}`);\n}\n"]}
@@ -1,22 +0,0 @@
1
- import { type EmulatorSeedConfig } from '@workos/emulate';
2
- export interface DevArgs {
3
- port: number;
4
- seed?: string;
5
- '--'?: string[];
6
- }
7
- /**
8
- * Default seed data for `workos dev` so the AuthKit login flow works
9
- * out of the box. Skipped when the user provides `--seed` or a
10
- * `workos-emulate.config.*` file is auto-detected.
11
- */
12
- export declare const DEFAULT_DEV_SEED: EmulatorSeedConfig;
13
- /**
14
- * Build the env vars object to inject into the child process.
15
- *
16
- * Sets both the base URL style (`WORKOS_API_BASE_URL`) and the decomposed
17
- * style (`WORKOS_API_HOSTNAME` + `WORKOS_API_PORT` + `WORKOS_API_HTTPS`)
18
- * so the emulator works with authkit SDKs (which read the decomposed vars)
19
- * and direct SDK consumers (which may use the base URL).
20
- */
21
- export declare function buildDevEnv(emulatorUrl: string, apiKey?: string): Record<string, string>;
22
- export declare function runDev(argv: DevArgs): Promise<void>;
@@ -1,145 +0,0 @@
1
- import { createEmulator } from '@workos/emulate';
2
- import { resolveDevCommand } from '../lib/dev-command.js';
3
- import { spawn } from 'node:child_process';
4
- import { readFileSync, existsSync } from 'node:fs';
5
- import { resolve } from 'node:path';
6
- import { parse as parseYaml } from 'yaml';
7
- import chalk from 'chalk';
8
- import { IS_WINDOWS, SPAWN_OPTS } from '../utils/platform.js';
9
- import { ExitCode, exitWithCode } from '../utils/exit-codes.js';
10
- import { exitWithError } from '../utils/output.js';
11
- import { formatWorkOSCommand } from '../utils/command-invocation.js';
12
- function loadSeedFile(filePath) {
13
- const resolved = resolve(filePath);
14
- if (!existsSync(resolved)) {
15
- exitWithError({ code: 'seed_not_found', message: `Seed file not found: ${resolved}` });
16
- }
17
- const content = readFileSync(resolved, 'utf-8');
18
- if (resolved.endsWith('.json')) {
19
- return JSON.parse(content);
20
- }
21
- return parseYaml(content);
22
- }
23
- function autoDetectSeedFile() {
24
- const candidates = ['workos-emulate.config.yaml', 'workos-emulate.config.yml', 'workos-emulate.config.json'];
25
- for (const name of candidates) {
26
- const filePath = resolve(name);
27
- if (existsSync(filePath)) {
28
- return loadSeedFile(filePath);
29
- }
30
- }
31
- return null;
32
- }
33
- /**
34
- * Default seed data for `workos dev` so the AuthKit login flow works
35
- * out of the box. Skipped when the user provides `--seed` or a
36
- * `workos-emulate.config.*` file is auto-detected.
37
- */
38
- export const DEFAULT_DEV_SEED = {
39
- users: [
40
- {
41
- email: 'test@example.com',
42
- first_name: 'Test',
43
- last_name: 'User',
44
- password: 'password',
45
- email_verified: true,
46
- },
47
- ],
48
- organizations: [
49
- {
50
- name: 'Test Organization',
51
- domains: [{ domain: 'example.com', state: 'verified' }],
52
- },
53
- ],
54
- };
55
- /**
56
- * Build the env vars object to inject into the child process.
57
- *
58
- * Sets both the base URL style (`WORKOS_API_BASE_URL`) and the decomposed
59
- * style (`WORKOS_API_HOSTNAME` + `WORKOS_API_PORT` + `WORKOS_API_HTTPS`)
60
- * so the emulator works with authkit SDKs (which read the decomposed vars)
61
- * and direct SDK consumers (which may use the base URL).
62
- */
63
- export function buildDevEnv(emulatorUrl, apiKey = 'sk_test_default') {
64
- const url = new URL(emulatorUrl);
65
- return {
66
- WORKOS_API_BASE_URL: emulatorUrl,
67
- WORKOS_API_HOSTNAME: url.hostname,
68
- WORKOS_API_PORT: url.port,
69
- WORKOS_API_HTTPS: 'false',
70
- WORKOS_API_KEY: apiKey,
71
- WORKOS_CLIENT_ID: 'client_emulated',
72
- };
73
- }
74
- export async function runDev(argv) {
75
- const userSeed = argv.seed ? loadSeedFile(argv.seed) : autoDetectSeedFile();
76
- const seedConfig = userSeed ?? DEFAULT_DEV_SEED;
77
- // 1. Start emulator
78
- const emulator = await createEmulator({
79
- port: argv.port,
80
- seed: seedConfig,
81
- });
82
- // 2. Resolve dev command
83
- const explicit = argv['--'];
84
- const devCmd = explicit && explicit.length > 0
85
- ? { command: explicit[0], args: explicit.slice(1), framework: null }
86
- : await resolveDevCommand(process.cwd());
87
- // 3. Print status banner
88
- console.log();
89
- console.log(`${chalk.cyan('WorkOS Emulate')} ${chalk.dim(emulator.url)}`);
90
- if (devCmd.framework) {
91
- console.log(chalk.dim(`Detected ${devCmd.framework}`));
92
- }
93
- console.log(chalk.dim(`Running: ${devCmd.command} ${devCmd.args.join(' ')}`));
94
- if (!userSeed) {
95
- console.log();
96
- console.log(` ${chalk.dim('Email:')} test@example.com`);
97
- console.log(` ${chalk.dim('Password:')} password`);
98
- }
99
- console.log();
100
- // 4. Spawn child process with env vars
101
- let child;
102
- try {
103
- child = spawn(devCmd.command, devCmd.args, {
104
- stdio: 'inherit',
105
- env: {
106
- ...process.env,
107
- ...buildDevEnv(emulator.url, emulator.apiKey),
108
- },
109
- ...SPAWN_OPTS,
110
- });
111
- }
112
- catch {
113
- console.error(chalk.red(`Failed to start: ${devCmd.command} ${devCmd.args.join(' ')}`));
114
- console.error(chalk.dim(`Try specifying the command explicitly: ${formatWorkOSCommand('dev -- <your-command>')}`));
115
- await emulator.close();
116
- exitWithCode(ExitCode.GENERAL_ERROR);
117
- }
118
- child.on('error', async (err) => {
119
- console.error(chalk.red(`Failed to start: ${devCmd.command}`));
120
- if (err.code === 'ENOENT') {
121
- console.error(chalk.dim(`Command not found: ${devCmd.command}`));
122
- console.error(chalk.dim(`Try specifying the command explicitly: ${formatWorkOSCommand('dev -- <your-command>')}`));
123
- }
124
- else {
125
- console.error(chalk.dim(err.message));
126
- }
127
- await emulator.close();
128
- exitWithCode(ExitCode.GENERAL_ERROR);
129
- });
130
- // 5. Signal handling — forward to child, then close emulator
131
- const shutdown = (signal) => {
132
- child.kill(signal);
133
- emulator.close().then(() => process.exit(0));
134
- };
135
- process.on('SIGINT', () => shutdown('SIGINT'));
136
- process.on('SIGTERM', () => shutdown('SIGTERM'));
137
- if (IS_WINDOWS) {
138
- process.on('SIGBREAK', () => shutdown('SIGINT'));
139
- }
140
- // 6. If child exits, close emulator and exit with same code
141
- child.on('exit', (code) => {
142
- emulator.close().then(() => process.exit(code ?? 0));
143
- });
144
- }
145
- //# sourceMappingURL=dev.js.map