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
package/dist/bin.js DELETED
@@ -1,1790 +0,0 @@
1
- #!/usr/bin/env node
2
- // Load .env.local for local development when --local flag is used
3
- if (process.argv.includes('--local') || process.env.WORKOS_DEV) {
4
- const { config } = await import('dotenv');
5
- // bin.ts compiles to dist/bin.js, so go up one level to find .env.local
6
- const { fileURLToPath } = await import('node:url');
7
- config({ path: fileURLToPath(new URL('../.env.local', import.meta.url)) });
8
- }
9
- import { satisfies } from 'semver';
10
- import { red } from './utils/logging.js';
11
- import { getConfig, getVersion } from './lib/settings.js';
12
- import yargs from 'yargs';
13
- import { hideBin } from 'yargs/helpers';
14
- import { ensureAuthenticated } from './lib/ensure-auth.js';
15
- import { checkForUpdates } from './lib/version-check.js';
16
- const NODE_VERSION_RANGE = getConfig().nodeVersion;
17
- // Have to run this above the other imports because they are importing the UI facade that
18
- // has the problematic imports.
19
- if (!satisfies(process.version, NODE_VERSION_RANGE)) {
20
- red(`WorkOS AuthKit installer requires Node.js ${NODE_VERSION_RANGE}. You are using Node.js ${process.version}. Please upgrade your Node.js version.`);
21
- process.exit(1);
22
- }
23
- import { InvalidInteractionModeError, isPromptAllowed, resolveInteractionMode, setInteractionMode, } from './utils/interaction-mode.js';
24
- import { resolveEffectiveOutputMode, resolveOutputMode, setOutputMode, isJsonMode, outputJson, outputError, exitWithError, } from './utils/output.js';
25
- import ui, { PromptUnavailableError } from './utils/ui.js';
26
- import { registerSubcommand } from './utils/register-subcommand.js';
27
- import { installCrashReporter, sanitizeMessage } from './utils/crash-reporter.js';
28
- import { installStoreForward, recoverPendingEvents } from './utils/telemetry-store-forward.js';
29
- import { loadDeviceId } from './lib/device-id.js';
30
- import { loadPreferences, isTelemetryEnabled } from './lib/preferences.js';
31
- import { maybeShowTelemetryNotice } from './lib/telemetry-notice.js';
32
- import { resolveCanonicalName, resolveCommandNameFromRawArgs, extractUserFlags, SKIP_TELEMETRY_COMMANDS, } from './utils/command-telemetry.js';
33
- import { CliExit } from './utils/cli-exit.js';
34
- import { telemetryClient } from './utils/telemetry-client.js';
35
- import { ExitCode } from './utils/exit-codes.js';
36
- import { analytics } from './utils/analytics.js';
37
- import { formatWorkOSCommand, getWorkOSCommand } from './utils/command-invocation.js';
38
- import { MIGRATIONS_DESCRIPTION } from './lib/constants.js';
39
- // Enable debug logging for all commands via env var.
40
- // Subsumes the installer's --debug flag for non-installer commands.
41
- if (process.env.WORKOS_DEBUG === '1') {
42
- const { enableDebugLogs } = await import('./utils/debug.js');
43
- enableDebugLogs();
44
- }
45
- // Telemetry infrastructure: crash reporter, store-forward, and gateway init.
46
- // Must be before yargs so crashes during startup are captured.
47
- installCrashReporter();
48
- installStoreForward();
49
- // Prewarm the telemetry opt-out preference before init: initForNonInstaller()
50
- // checks isEnabled() (which reads the preference), and session/command events
51
- // may fire shortly after. The sync getPreferences() fallback makes correctness
52
- // ordering-independent, but prewarming keeps the synchronous event path off
53
- // blocking fs IO (same rationale as the device-id prewarm).
54
- await loadPreferences();
55
- analytics.initForNonInstaller();
56
- // Prewarm the device id off the blocking-fs path so the synchronous telemetry
57
- // event path reads it from cache. Cheap (a tiny file read); awaited so it is
58
- // resolved before any command emits an event.
59
- await loadDeviceId();
60
- // Fire-and-forget: recover events from previous crashes/exits.
61
- // NO await — must not block startup (flush timeout is 3s).
62
- recoverPendingEvents();
63
- // Resolve output mode early from raw argv (before yargs parses)
64
- const rawArgs = hideBin(process.argv);
65
- const hasJsonFlag = rawArgs.includes('--json');
66
- const baseOutputMode = resolveOutputMode(hasJsonFlag);
67
- setOutputMode(baseOutputMode);
68
- try {
69
- const interaction = resolveInteractionMode({ argv: rawArgs });
70
- setInteractionMode(interaction);
71
- setOutputMode(resolveEffectiveOutputMode(baseOutputMode, interaction));
72
- }
73
- catch (error) {
74
- if (error instanceof InvalidInteractionModeError) {
75
- outputError({ code: 'invalid_mode', message: error.message });
76
- process.exit(ExitCode.GENERAL_ERROR);
77
- }
78
- if (error instanceof CliExit)
79
- process.exit(error.exitCode);
80
- throw error;
81
- }
82
- // Intercept --help --json before yargs parses (yargs exits on --help)
83
- if (hasJsonFlag && (rawArgs.includes('--help') || rawArgs.includes('-h'))) {
84
- const { buildCommandTree, extractHelpJsonCommand } = await import('./utils/help-json.js');
85
- const command = extractHelpJsonCommand(rawArgs);
86
- outputJson(buildCommandTree(command));
87
- process.exit(0);
88
- }
89
- /** Apply insecure storage flag if set */
90
- async function applyInsecureStorage(insecureStorage) {
91
- if (insecureStorage) {
92
- const { setInsecureStorage } = await import('./lib/credentials.js');
93
- const { setInsecureConfigStorage } = await import('./lib/config-store.js');
94
- setInsecureStorage(true);
95
- setInsecureConfigStorage(true);
96
- }
97
- }
98
- /** Show non-blocking warning if active env is unclaimed (once per session). */
99
- async function maybeWarnUnclaimed() {
100
- const { warnIfUnclaimed } = await import('./lib/unclaimed-warning.js');
101
- await warnIfUnclaimed();
102
- }
103
- import { resolveInstallCredentials } from './lib/resolve-install-credentials.js';
104
- /** Shared insecure-storage option for commands that access credentials */
105
- const insecureStorageOption = {
106
- 'insecure-storage': {
107
- default: false,
108
- describe: 'Store credentials in plaintext file instead of system keyring',
109
- type: 'boolean',
110
- },
111
- };
112
- const installerOptions = {
113
- direct: {
114
- alias: 'D',
115
- default: false,
116
- describe: 'Use your own Anthropic API key (bypass llm-gateway)',
117
- type: 'boolean',
118
- },
119
- debug: {
120
- default: false,
121
- describe: 'Enable verbose logging',
122
- type: 'boolean',
123
- },
124
- ...insecureStorageOption,
125
- // Hidden dev/automation flags (use env vars)
126
- local: {
127
- default: false,
128
- type: 'boolean',
129
- hidden: true,
130
- },
131
- ci: {
132
- default: false,
133
- type: 'boolean',
134
- hidden: true,
135
- },
136
- 'skip-auth': {
137
- default: false,
138
- type: 'boolean',
139
- hidden: true,
140
- },
141
- 'api-key': {
142
- type: 'string',
143
- describe: 'WorkOS API key (required in non-interactive mode)',
144
- },
145
- 'client-id': {
146
- type: 'string',
147
- describe: 'WorkOS client ID (required in non-interactive mode)',
148
- },
149
- inspect: {
150
- default: false,
151
- type: 'boolean',
152
- hidden: true,
153
- },
154
- // User-facing flags
155
- 'homepage-url': {
156
- describe: 'App homepage URL for WorkOS (defaults to http://localhost:{port})',
157
- type: 'string',
158
- },
159
- 'redirect-uri': {
160
- describe: 'Redirect URI for WorkOS callback (defaults to framework convention)',
161
- type: 'string',
162
- },
163
- validate: {
164
- default: true,
165
- describe: 'Run post-installation validation (use --no-validate to skip)',
166
- type: 'boolean',
167
- },
168
- 'install-dir': {
169
- describe: 'Directory to install WorkOS AuthKit in',
170
- type: 'string',
171
- },
172
- 'force-install': {
173
- default: false,
174
- describe: 'Force install packages even if peer dependency checks fail',
175
- type: 'boolean',
176
- },
177
- dashboard: {
178
- alias: 'd',
179
- default: false,
180
- describe: 'Run with visual dashboard mode',
181
- type: 'boolean',
182
- },
183
- branch: {
184
- default: true,
185
- describe: 'Create a new branch for changes (use --no-branch to skip)',
186
- type: 'boolean',
187
- },
188
- commit: {
189
- default: true,
190
- describe: 'Auto-commit after installation (use --no-commit to skip)',
191
- type: 'boolean',
192
- },
193
- 'create-pr': {
194
- default: false,
195
- describe: 'Auto-create pull request after installation',
196
- type: 'boolean',
197
- },
198
- 'git-check': {
199
- default: true,
200
- describe: 'Check for dirty working tree (use --no-git-check to skip)',
201
- type: 'boolean',
202
- },
203
- scaffold: {
204
- default: false,
205
- describe: 'Scaffold a new Next.js app when run in an empty directory',
206
- type: 'boolean',
207
- },
208
- pm: {
209
- describe: 'Package manager for the scaffolded app',
210
- choices: ['npm', 'pnpm', 'yarn', 'bun'],
211
- type: 'string',
212
- },
213
- router: {
214
- choices: ['app', 'pages'],
215
- describe: 'Next.js router to target when detection is ambiguous (app or pages)',
216
- type: 'string',
217
- },
218
- };
219
- // Check for updates (blocks up to 500ms, skip in JSON/non-human modes to keep machine streams clean)
220
- if (!isJsonMode() && isPromptAllowed())
221
- await checkForUpdates();
222
- async function runCli() {
223
- const startTime = Date.now();
224
- let commandName = 'root';
225
- const flags = extractUserFlags(rawArgs);
226
- const parser = yargs(rawArgs)
227
- .parserConfiguration({ 'populate--': true })
228
- .exitProcess(false)
229
- .fail((msg, err) => {
230
- if (err instanceof CliExit)
231
- throw err;
232
- // yargs runs its demand/strict validation before dispatching middleware,
233
- // so the command-name middleware below has not run yet and commandName is
234
- // still 'root' (which SKIP_TELEMETRY_COMMANDS would drop). Recover the
235
- // top-level command from the raw args so the validation_error event is
236
- // attributed to the real command instead of being silently skipped. Only
237
- // the top-level token is used. Later positionals can be user values
238
- // (org names, emails, IDs), so recording them would leak data.
239
- if (commandName === 'root') {
240
- commandName = resolveCommandNameFromRawArgs(rawArgs);
241
- }
242
- if (msg) {
243
- outputError({ code: 'invalid_usage', message: msg });
244
- }
245
- throw new CliExit(ExitCode.GENERAL_ERROR, { reason: 'validation_error' });
246
- })
247
- .env('WORKOS_INSTALLER')
248
- .option('json', {
249
- type: 'boolean',
250
- default: false,
251
- describe: 'Output results as JSON (auto-enabled in non-TTY)',
252
- global: true,
253
- })
254
- .option('mode', {
255
- type: 'string',
256
- choices: ['human', 'agent', 'ci'],
257
- describe: 'Interaction mode: human, coding agent, or CI automation',
258
- global: true,
259
- })
260
- .middleware((argv) => {
261
- const commandParts = argv._ || [];
262
- commandName = resolveCanonicalName(commandParts);
263
- })
264
- .middleware((argv) => {
265
- // First-run, stderr-only notice that telemetry is being collected.
266
- // Skip while the user is actively managing telemetry, and on the
267
- // empty/root command (bare `--help` / `--version` / `$0`). The notice
268
- // is self-guarded — it no-ops in json mode, when already shown, when
269
- // opted out, and after the first display this session.
270
- const command = String(argv._?.[0] ?? '');
271
- if (command === 'telemetry' || command === '')
272
- return;
273
- maybeShowTelemetryNotice();
274
- })
275
- .middleware(async (argv) => {
276
- // Warn about unclaimed environments before management commands.
277
- // Excluded: auth/claim/install/setup/dashboard handle their own credential
278
- // or onboarding flows; skills/doctor/env/debug are utility commands where
279
- // the warning is unnecessary.
280
- const command = String(argv._?.[0] ?? '');
281
- if ([
282
- 'auth',
283
- 'skills',
284
- 'doctor',
285
- 'env',
286
- 'claim',
287
- 'install',
288
- 'setup',
289
- 'debug',
290
- 'dashboard',
291
- 'emulate',
292
- 'dev',
293
- 'migrations',
294
- '',
295
- ].includes(command))
296
- return;
297
- await applyInsecureStorage(argv.insecureStorage);
298
- await maybeWarnUnclaimed();
299
- })
300
- .command('auth', 'Manage authentication (login, logout, status)', (yargs) => {
301
- yargs.options(insecureStorageOption);
302
- registerSubcommand(yargs, 'login', 'Authenticate with WorkOS via browser-based OAuth', (y) => y, async (argv) => {
303
- await applyInsecureStorage(argv.insecureStorage);
304
- const { runLogin } = await import('./commands/login.js');
305
- await runLogin();
306
- });
307
- registerSubcommand(yargs, 'logout', 'Remove stored WorkOS credentials and tokens', (y) => y, async (argv) => {
308
- await applyInsecureStorage(argv.insecureStorage);
309
- const { runLogout } = await import('./commands/logout.js');
310
- await runLogout();
311
- });
312
- registerSubcommand(yargs, 'status', 'Show current authentication status', (y) => y, async (argv) => {
313
- await applyInsecureStorage(argv.insecureStorage);
314
- const { runAuthStatus } = await import('./commands/auth-status.js');
315
- await runAuthStatus();
316
- });
317
- return yargs.demandCommand(1, 'Please specify an auth subcommand').strict();
318
- })
319
- .command('telemetry', 'Manage telemetry collection (opt-out, opt-in, status)', (yargs) => {
320
- registerSubcommand(yargs, 'opt-out', 'Disable telemetry collection (persists across runs)', (y) => y, async () => {
321
- const { runTelemetryOptOut } = await import('./commands/telemetry.js');
322
- await runTelemetryOptOut();
323
- });
324
- registerSubcommand(yargs, 'opt-in', 'Re-enable telemetry collection', (y) => y, async () => {
325
- const { runTelemetryOptIn } = await import('./commands/telemetry.js');
326
- await runTelemetryOptIn();
327
- });
328
- registerSubcommand(yargs, 'status', 'Show whether telemetry is enabled and why', (y) => y, async () => {
329
- const { runTelemetryStatus } = await import('./commands/telemetry.js');
330
- await runTelemetryStatus();
331
- });
332
- return yargs.demandCommand(1, 'Please specify a telemetry subcommand').strict();
333
- })
334
- .command('skills', 'Manage WorkOS skills for coding agents (Claude Code, Codex, Cursor, Goose)', (yargs) => {
335
- registerSubcommand(yargs, 'install', 'Install bundled AuthKit skills to coding agents', (y) => y
336
- .option('skill', {
337
- alias: 's',
338
- type: 'array',
339
- string: true,
340
- description: 'Install specific skill(s) by name',
341
- })
342
- .option('agent', {
343
- alias: 'a',
344
- type: 'array',
345
- string: true,
346
- description: 'Target specific agent(s): claude-code, codex, cursor, goose',
347
- }), async (argv) => {
348
- const { runInstallSkill } = await import('./commands/install-skill.js');
349
- await runInstallSkill({
350
- skill: argv.skill,
351
- agent: argv.agent,
352
- });
353
- });
354
- registerSubcommand(yargs, 'uninstall', 'Remove installed WorkOS skills from coding agents', (y) => y
355
- .option('skill', {
356
- alias: 's',
357
- type: 'array',
358
- string: true,
359
- description: 'Remove specific skill(s) by name',
360
- })
361
- .option('agent', {
362
- alias: 'a',
363
- type: 'array',
364
- string: true,
365
- description: 'Target specific agent(s): claude-code, codex, cursor, goose',
366
- }), async (argv) => {
367
- const { runUninstallSkill } = await import('./commands/uninstall-skill.js');
368
- await runUninstallSkill({
369
- skill: argv.skill,
370
- agent: argv.agent,
371
- });
372
- });
373
- registerSubcommand(yargs, 'list', 'List available and installed skills', (y) => y.option('agent', {
374
- alias: 'a',
375
- type: 'array',
376
- string: true,
377
- description: 'Target specific agent(s): claude-code, codex, cursor, goose',
378
- }), async (argv) => {
379
- const { runListSkills } = await import('./commands/list-skills.js');
380
- await runListSkills({
381
- agent: argv.agent,
382
- });
383
- });
384
- return yargs.demandCommand(1, 'Please specify a skills subcommand').strict();
385
- })
386
- .command('mcp', 'Manage the WorkOS MCP server in coding agents (Claude Code, Codex, Cursor)', (yargs) => {
387
- registerSubcommand(yargs, 'install', 'Add the WorkOS MCP server to detected coding agents', (y) => y.option('agent', {
388
- alias: 'a',
389
- type: 'array',
390
- string: true,
391
- description: 'Target specific agent(s): claude-code, codex, cursor',
392
- }), async (argv) => {
393
- const { runMcpInstall } = await import('./commands/mcp.js');
394
- await runMcpInstall({ agent: argv.agent });
395
- });
396
- registerSubcommand(yargs, 'remove', 'Remove the WorkOS MCP server from coding agents', (y) => y.option('agent', {
397
- alias: 'a',
398
- type: 'array',
399
- string: true,
400
- description: 'Target specific agent(s): claude-code, codex, cursor',
401
- }), async (argv) => {
402
- const { runMcpRemove } = await import('./commands/mcp.js');
403
- await runMcpRemove({ agent: argv.agent });
404
- });
405
- registerSubcommand(yargs, 'status', 'Show which coding agents have the WorkOS MCP server configured', (y) => y, async () => {
406
- const { runMcpStatus } = await import('./commands/mcp.js');
407
- await runMcpStatus();
408
- });
409
- return yargs.demandCommand(1, 'Please specify an mcp subcommand').strict();
410
- })
411
- .command('doctor', 'Diagnose WorkOS AuthKit integration issues in the current project', (yargs) => yargs.options({
412
- verbose: {
413
- type: 'boolean',
414
- default: false,
415
- description: 'Include additional diagnostic information',
416
- },
417
- 'skip-api': {
418
- type: 'boolean',
419
- default: false,
420
- description: 'Skip API calls (offline mode)',
421
- },
422
- 'skip-ai': {
423
- type: 'boolean',
424
- default: false,
425
- description: 'Skip AI-powered analysis',
426
- },
427
- 'install-dir': {
428
- type: 'string',
429
- default: process.cwd(),
430
- description: 'Project directory to analyze',
431
- },
432
- json: {
433
- type: 'boolean',
434
- default: false,
435
- description: 'Output report as JSON',
436
- },
437
- copy: {
438
- type: 'boolean',
439
- default: false,
440
- description: 'Copy report to clipboard',
441
- },
442
- fix: {
443
- type: 'boolean',
444
- default: false,
445
- description: 'Auto-update stale WorkOS skills (writes to <agent>/skills/workos/ and workos-widgets/ only)',
446
- },
447
- }), async (argv) => {
448
- const { handleDoctor } = await import('./commands/doctor.js');
449
- await handleDoctor(argv);
450
- })
451
- .command('verify-login', 'Verify the AuthKit login loop end-to-end against the active environment (creates and deletes a throwaway user)', (yargs) => yargs.options({
452
- ...insecureStorageOption,
453
- 'api-key': {
454
- type: 'string',
455
- describe: 'WorkOS API key (overrides environment config). Format: sk_test_* (production keys are refused)',
456
- },
457
- 'client-id': {
458
- type: 'string',
459
- describe: 'WorkOS client ID (overrides the active environment)',
460
- },
461
- method: {
462
- type: 'string',
463
- choices: ['password'],
464
- default: 'password',
465
- describe: 'Authentication method to verify',
466
- },
467
- }), async (argv) => {
468
- await applyInsecureStorage(argv.insecureStorage);
469
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
470
- const { getActiveEnvironment } = await import('./lib/config-store.js');
471
- const { runVerifyLogin } = await import('./commands/verify-login.js');
472
- const apiKey = resolveApiKey({ apiKey: argv.apiKey }); // exits 4 if none
473
- const activeEnv = getActiveEnvironment();
474
- await runVerifyLogin({
475
- apiKey,
476
- clientId: argv.clientId ?? activeEnv?.clientId,
477
- baseUrl: resolveApiBaseUrl(),
478
- envType: activeEnv?.type ?? null,
479
- envName: activeEnv?.name,
480
- method: argv.method,
481
- });
482
- })
483
- // NOTE: When adding commands here, also update src/utils/help-json.ts
484
- .command('env', 'Manage environment configurations (API keys, endpoints, active environment)', (yargs) => {
485
- yargs.options(insecureStorageOption);
486
- registerSubcommand(yargs, 'add [name] [apiKey]', 'Add an environment configuration', (y) => y
487
- .positional('name', { type: 'string', describe: 'Environment name' })
488
- .positional('apiKey', { type: 'string', describe: 'WorkOS API key' })
489
- .option('client-id', { type: 'string', describe: 'WorkOS client ID' })
490
- .option('endpoint', { type: 'string', describe: 'Custom API endpoint' }), async (argv) => {
491
- await applyInsecureStorage(argv.insecureStorage);
492
- const { runEnvAdd } = await import('./commands/env.js');
493
- await runEnvAdd({
494
- name: argv.name,
495
- apiKey: argv.apiKey,
496
- clientId: argv.clientId,
497
- endpoint: argv.endpoint,
498
- });
499
- });
500
- registerSubcommand(yargs, 'remove <name>', 'Remove an environment from local CLI config (does not delete or unclaim the environment in WorkOS)', (y) => y.positional('name', { type: 'string', demandOption: true, describe: 'Environment name' }), async (argv) => {
501
- await applyInsecureStorage(argv.insecureStorage);
502
- const { runEnvRemove } = await import('./commands/env.js');
503
- await runEnvRemove(argv.name);
504
- });
505
- registerSubcommand(yargs, 'switch [name]', 'Switch active environment', (y) => y.positional('name', { type: 'string', describe: 'Environment name' }), async (argv) => {
506
- if (!argv.name && !isPromptAllowed()) {
507
- exitWithError({
508
- code: 'missing_args',
509
- message: `Environment name required. Usage: ${formatWorkOSCommand('env switch <name>')}`,
510
- });
511
- }
512
- await applyInsecureStorage(argv.insecureStorage);
513
- const { runEnvSwitch } = await import('./commands/env.js');
514
- await runEnvSwitch(argv.name);
515
- });
516
- registerSubcommand(yargs, 'list', 'List configured environments', (y) => y, async (argv) => {
517
- await applyInsecureStorage(argv.insecureStorage);
518
- const { runEnvList } = await import('./commands/env.js');
519
- await runEnvList();
520
- });
521
- registerSubcommand(yargs, 'claim', 'Claim an unclaimed environment — link it to your account (permanent — cannot be undone)', (y) => y, async (argv) => {
522
- await applyInsecureStorage(argv.insecureStorage);
523
- const { runClaim } = await import('./commands/claim.js');
524
- await runClaim();
525
- });
526
- registerSubcommand(yargs, 'provision', 'Provision a new unclaimed WorkOS environment (credentials only, no code changes)', (y) => y, async (argv) => {
527
- await applyInsecureStorage(argv.insecureStorage);
528
- const { runEnvProvision } = await import('./commands/env.js');
529
- await runEnvProvision();
530
- });
531
- return yargs.demandCommand(1, 'Please specify an env subcommand').strict();
532
- })
533
- .command('api [endpoint] [filter]', 'Make authenticated requests to the WorkOS API', (yargs) => yargs
534
- .options(insecureStorageOption)
535
- .positional('endpoint', {
536
- type: 'string',
537
- describe: "API endpoint path (e.g. /users), or 'ls' to list endpoints",
538
- })
539
- .positional('filter', {
540
- type: 'string',
541
- describe: 'Filter keyword (used with ls)',
542
- })
543
- .option('method', {
544
- alias: 'X',
545
- type: 'string',
546
- describe: 'HTTP method (default: GET, or POST if body provided)',
547
- })
548
- .option('data', {
549
- alias: 'd',
550
- type: 'string',
551
- describe: 'JSON request body',
552
- })
553
- .option('file', {
554
- type: 'string',
555
- describe: 'Read request body from a file (or - for stdin)',
556
- })
557
- .option('include', {
558
- alias: 'i',
559
- type: 'boolean',
560
- default: false,
561
- describe: 'Show response headers',
562
- })
563
- .option('api-key', {
564
- type: 'string',
565
- describe: 'Override the API key',
566
- })
567
- .option('dry-run', {
568
- type: 'boolean',
569
- default: false,
570
- describe: 'Show the request without executing it',
571
- })
572
- .option('yes', {
573
- alias: 'y',
574
- type: 'boolean',
575
- default: false,
576
- describe: 'Skip confirmation for mutating requests',
577
- })
578
- .example('workos api ls', 'List all available endpoints')
579
- .example('workos api ls users', 'List endpoints matching "users"')
580
- .example('workos api /user_management/users', 'GET /user_management/users')
581
- .example('workos api /organizations -d \'{"name":"Acme"}\'', 'POST with a JSON body')
582
- .example('workos api /organizations/org_123 -X DELETE', 'DELETE an organization'), async (argv) => {
583
- await applyInsecureStorage(argv.insecureStorage);
584
- const endpoint = argv.endpoint;
585
- const filter = argv.filter;
586
- const { runApiLs, runApiRequest, runApiInteractive } = await import('./commands/api/index.js');
587
- if (!endpoint) {
588
- await runApiInteractive({ apiKey: argv.apiKey });
589
- return;
590
- }
591
- if (endpoint === 'ls') {
592
- await runApiLs(filter);
593
- return;
594
- }
595
- await runApiRequest(endpoint, {
596
- method: argv.method,
597
- data: argv.data,
598
- file: argv.file,
599
- include: argv.include,
600
- apiKey: argv.apiKey,
601
- dryRun: argv.dryRun,
602
- yes: argv.yes,
603
- });
604
- })
605
- .command(['organization', 'org'], 'Manage WorkOS organizations (create, update, get, list, delete)', (yargs) => {
606
- yargs.options({
607
- ...insecureStorageOption,
608
- 'api-key': {
609
- type: 'string',
610
- describe: 'WorkOS API key (overrides environment config). Format: sk_live_* or sk_test_*',
611
- },
612
- });
613
- registerSubcommand(yargs, 'create <name> [domains..]', 'Create a new organization with optional verified domains', (y) => y
614
- .positional('name', { type: 'string', demandOption: true, describe: 'Organization name' })
615
- .positional('domains', {
616
- type: 'string',
617
- array: true,
618
- describe: 'Domains in format domain:state (state defaults to verified)',
619
- }), async (argv) => {
620
- await applyInsecureStorage(argv.insecureStorage);
621
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
622
- const { runOrgCreate } = await import('./commands/organization.js');
623
- const apiKey = resolveApiKey({ apiKey: argv.apiKey });
624
- await runOrgCreate(argv.name, argv.domains || [], apiKey, resolveApiBaseUrl());
625
- });
626
- registerSubcommand(yargs, 'update <orgId> <name> [domain] [state]', 'Update an organization', (y) => y
627
- .positional('orgId', { type: 'string', demandOption: true, describe: 'Organization ID' })
628
- .positional('name', { type: 'string', demandOption: true, describe: 'Organization name' })
629
- .positional('domain', { type: 'string', describe: 'Domain' })
630
- .positional('state', { type: 'string', describe: 'Domain state (verified or pending)' }), async (argv) => {
631
- await applyInsecureStorage(argv.insecureStorage);
632
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
633
- const { runOrgUpdate } = await import('./commands/organization.js');
634
- const apiKey = resolveApiKey({ apiKey: argv.apiKey });
635
- await runOrgUpdate(argv.orgId, argv.name, apiKey, argv.domain, argv.state, resolveApiBaseUrl());
636
- });
637
- registerSubcommand(yargs, 'get <orgId>', 'Get an organization by ID', (y) => y.positional('orgId', { type: 'string', demandOption: true, describe: 'Organization ID' }), async (argv) => {
638
- await applyInsecureStorage(argv.insecureStorage);
639
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
640
- const { runOrgGet } = await import('./commands/organization.js');
641
- const apiKey = resolveApiKey({ apiKey: argv.apiKey });
642
- await runOrgGet(argv.orgId, apiKey, resolveApiBaseUrl());
643
- });
644
- registerSubcommand(yargs, 'list', 'List organizations', (y) => y.options({
645
- domain: { type: 'string', describe: 'Filter by domain' },
646
- limit: { type: 'number', describe: 'Limit number of results' },
647
- before: { type: 'string', describe: 'Cursor for results before a specific item' },
648
- after: { type: 'string', describe: 'Cursor for results after a specific item' },
649
- order: { type: 'string', describe: 'Order of results (asc or desc)' },
650
- }), async (argv) => {
651
- await applyInsecureStorage(argv.insecureStorage);
652
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
653
- const { runOrgList } = await import('./commands/organization.js');
654
- const apiKey = resolveApiKey({ apiKey: argv.apiKey });
655
- await runOrgList({ domain: argv.domain, limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, apiKey, resolveApiBaseUrl());
656
- });
657
- registerSubcommand(yargs, 'delete <orgId>', 'Delete an organization', (y) => y.positional('orgId', { type: 'string', demandOption: true, describe: 'Organization ID' }), async (argv) => {
658
- await applyInsecureStorage(argv.insecureStorage);
659
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
660
- const { runOrgDelete } = await import('./commands/organization.js');
661
- const apiKey = resolveApiKey({ apiKey: argv.apiKey });
662
- await runOrgDelete(argv.orgId, apiKey, resolveApiBaseUrl());
663
- });
664
- return yargs.demandCommand(1, 'Please specify an organization subcommand').strict();
665
- })
666
- .command('user', 'Manage WorkOS users (get, list, update, delete)', (yargs) => {
667
- yargs.options({
668
- ...insecureStorageOption,
669
- 'api-key': {
670
- type: 'string',
671
- describe: 'WorkOS API key (overrides environment config). Format: sk_live_* or sk_test_*',
672
- },
673
- });
674
- registerSubcommand(yargs, 'get <userId>', 'Get a user by ID', (y) => y.positional('userId', { type: 'string', demandOption: true, describe: 'User ID' }), async (argv) => {
675
- await applyInsecureStorage(argv.insecureStorage);
676
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
677
- const { runUserGet } = await import('./commands/user.js');
678
- await runUserGet(argv.userId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
679
- });
680
- registerSubcommand(yargs, 'list', 'List users', (y) => y.options({
681
- email: { type: 'string', describe: 'Filter by email' },
682
- organization: { type: 'string', describe: 'Filter by organization ID' },
683
- limit: { type: 'number', describe: 'Limit number of results' },
684
- before: { type: 'string', describe: 'Cursor for results before a specific item' },
685
- after: { type: 'string', describe: 'Cursor for results after a specific item' },
686
- order: { type: 'string', describe: 'Order of results (asc or desc)' },
687
- }), async (argv) => {
688
- await applyInsecureStorage(argv.insecureStorage);
689
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
690
- const { runUserList } = await import('./commands/user.js');
691
- await runUserList({
692
- email: argv.email,
693
- organization: argv.organization,
694
- limit: argv.limit,
695
- before: argv.before,
696
- after: argv.after,
697
- order: argv.order,
698
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
699
- });
700
- registerSubcommand(yargs, 'update <userId>', 'Update a user', (y) => y.positional('userId', { type: 'string', demandOption: true, describe: 'User ID' }).options({
701
- 'first-name': { type: 'string', describe: 'First name' },
702
- 'last-name': { type: 'string', describe: 'Last name' },
703
- 'email-verified': { type: 'boolean', describe: 'Email verification status' },
704
- password: { type: 'string', describe: 'New password' },
705
- 'external-id': { type: 'string', describe: 'External ID' },
706
- }), async (argv) => {
707
- await applyInsecureStorage(argv.insecureStorage);
708
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
709
- const { runUserUpdate } = await import('./commands/user.js');
710
- await runUserUpdate(argv.userId, resolveApiKey({ apiKey: argv.apiKey }), {
711
- firstName: argv.firstName,
712
- lastName: argv.lastName,
713
- emailVerified: argv.emailVerified,
714
- password: argv.password,
715
- externalId: argv.externalId,
716
- }, resolveApiBaseUrl());
717
- });
718
- registerSubcommand(yargs, 'delete <userId>', 'Delete a user', (y) => y.positional('userId', { type: 'string', demandOption: true, describe: 'User ID' }), async (argv) => {
719
- await applyInsecureStorage(argv.insecureStorage);
720
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
721
- const { runUserDelete } = await import('./commands/user.js');
722
- await runUserDelete(argv.userId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
723
- });
724
- return yargs.demandCommand(1, 'Please specify a user subcommand').strict();
725
- })
726
- // --- Resource Management Commands ---
727
- .command('role', 'Manage WorkOS roles (environment and organization-scoped)', (yargs) => {
728
- yargs.options({
729
- ...insecureStorageOption,
730
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
731
- org: { type: 'string', describe: 'Organization ID (for org-scoped roles)' },
732
- });
733
- registerSubcommand(yargs, 'list', 'List roles', (y) => y, async (argv) => {
734
- await applyInsecureStorage(argv.insecureStorage);
735
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
736
- const { runRoleList } = await import('./commands/role.js');
737
- await runRoleList(argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
738
- });
739
- registerSubcommand(yargs, 'get <slug>', 'Get a role by slug', (y) => y.positional('slug', { type: 'string', demandOption: true }), async (argv) => {
740
- await applyInsecureStorage(argv.insecureStorage);
741
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
742
- const { runRoleGet } = await import('./commands/role.js');
743
- await runRoleGet(argv.slug, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
744
- });
745
- registerSubcommand(yargs, 'create', 'Create a role', (y) => y.options({
746
- slug: { type: 'string', demandOption: true, describe: 'Role slug' },
747
- name: { type: 'string', demandOption: true, describe: 'Role name' },
748
- description: { type: 'string', describe: 'Role description' },
749
- }), async (argv) => {
750
- await applyInsecureStorage(argv.insecureStorage);
751
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
752
- const { runRoleCreate } = await import('./commands/role.js');
753
- await runRoleCreate({ slug: argv.slug, name: argv.name, description: argv.description }, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
754
- });
755
- registerSubcommand(yargs, 'update <slug>', 'Update a role', (y) => y
756
- .positional('slug', { type: 'string', demandOption: true })
757
- .options({ name: { type: 'string' }, description: { type: 'string' } }), async (argv) => {
758
- await applyInsecureStorage(argv.insecureStorage);
759
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
760
- const { runRoleUpdate } = await import('./commands/role.js');
761
- await runRoleUpdate(argv.slug, { name: argv.name, description: argv.description }, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
762
- });
763
- registerSubcommand(yargs, 'delete <slug>', 'Delete an org-scoped role (requires --org)', (y) => y.positional('slug', { type: 'string', demandOption: true }).demandOption('org'), async (argv) => {
764
- await applyInsecureStorage(argv.insecureStorage);
765
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
766
- const { runRoleDelete } = await import('./commands/role.js');
767
- await runRoleDelete(argv.slug, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
768
- });
769
- registerSubcommand(yargs, 'set-permissions <slug>', 'Set all permissions on a role (replaces existing)', (y) => y.positional('slug', { type: 'string', demandOption: true }).option('permissions', {
770
- type: 'string',
771
- demandOption: true,
772
- describe: 'Comma-separated permission slugs',
773
- }), async (argv) => {
774
- await applyInsecureStorage(argv.insecureStorage);
775
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
776
- const { runRoleSetPermissions } = await import('./commands/role.js');
777
- await runRoleSetPermissions(argv.slug, argv.permissions.split(','), argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
778
- });
779
- registerSubcommand(yargs, 'add-permission <slug> <permissionSlug>', 'Add a permission to a role', (y) => y
780
- .positional('slug', { type: 'string', demandOption: true })
781
- .positional('permissionSlug', { type: 'string', demandOption: true }), async (argv) => {
782
- await applyInsecureStorage(argv.insecureStorage);
783
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
784
- const { runRoleAddPermission } = await import('./commands/role.js');
785
- await runRoleAddPermission(argv.slug, argv.permissionSlug, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
786
- });
787
- registerSubcommand(yargs, 'remove-permission <slug> <permissionSlug>', 'Remove a permission from an org role (requires --org)', (y) => y
788
- .positional('slug', { type: 'string', demandOption: true })
789
- .positional('permissionSlug', { type: 'string', demandOption: true })
790
- .demandOption('org'), async (argv) => {
791
- await applyInsecureStorage(argv.insecureStorage);
792
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
793
- const { runRoleRemovePermission } = await import('./commands/role.js');
794
- await runRoleRemovePermission(argv.slug, argv.permissionSlug, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
795
- });
796
- return yargs.demandCommand(1, 'Please specify a role subcommand').strict();
797
- })
798
- .command('permission', 'Manage WorkOS permissions', (yargs) => {
799
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
800
- registerSubcommand(yargs, 'list', 'List permissions', (y) => y.options({
801
- limit: { type: 'number' },
802
- before: { type: 'string' },
803
- after: { type: 'string' },
804
- order: { type: 'string' },
805
- }), async (argv) => {
806
- await applyInsecureStorage(argv.insecureStorage);
807
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
808
- const { runPermissionList } = await import('./commands/permission.js');
809
- await runPermissionList({ limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
810
- });
811
- registerSubcommand(yargs, 'get <slug>', 'Get a permission', (y) => y.positional('slug', { type: 'string', demandOption: true }), async (argv) => {
812
- await applyInsecureStorage(argv.insecureStorage);
813
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
814
- const { runPermissionGet } = await import('./commands/permission.js');
815
- await runPermissionGet(argv.slug, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
816
- });
817
- registerSubcommand(yargs, 'create', 'Create a permission', (y) => y.options({
818
- slug: { type: 'string', demandOption: true },
819
- name: { type: 'string', demandOption: true },
820
- description: { type: 'string' },
821
- }), async (argv) => {
822
- await applyInsecureStorage(argv.insecureStorage);
823
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
824
- const { runPermissionCreate } = await import('./commands/permission.js');
825
- await runPermissionCreate({ slug: argv.slug, name: argv.name, description: argv.description }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
826
- });
827
- registerSubcommand(yargs, 'update <slug>', 'Update a permission', (y) => y
828
- .positional('slug', { type: 'string', demandOption: true })
829
- .options({ name: { type: 'string' }, description: { type: 'string' } }), async (argv) => {
830
- await applyInsecureStorage(argv.insecureStorage);
831
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
832
- const { runPermissionUpdate } = await import('./commands/permission.js');
833
- await runPermissionUpdate(argv.slug, { name: argv.name, description: argv.description }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
834
- });
835
- registerSubcommand(yargs, 'delete <slug>', 'Delete a permission', (y) => y.positional('slug', { type: 'string', demandOption: true }), async (argv) => {
836
- await applyInsecureStorage(argv.insecureStorage);
837
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
838
- const { runPermissionDelete } = await import('./commands/permission.js');
839
- await runPermissionDelete(argv.slug, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
840
- });
841
- return yargs.demandCommand(1, 'Please specify a permission subcommand').strict();
842
- })
843
- .command('membership', 'Manage organization memberships', (yargs) => {
844
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
845
- registerSubcommand(yargs, 'list', 'List memberships', (y) => y.options({
846
- org: { type: 'string' },
847
- user: { type: 'string' },
848
- limit: { type: 'number' },
849
- before: { type: 'string' },
850
- after: { type: 'string' },
851
- order: { type: 'string' },
852
- }), async (argv) => {
853
- await applyInsecureStorage(argv.insecureStorage);
854
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
855
- const { runMembershipList } = await import('./commands/membership.js');
856
- await runMembershipList({
857
- org: argv.org,
858
- user: argv.user,
859
- limit: argv.limit,
860
- before: argv.before,
861
- after: argv.after,
862
- order: argv.order,
863
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
864
- });
865
- registerSubcommand(yargs, 'get <id>', 'Get a membership', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
866
- await applyInsecureStorage(argv.insecureStorage);
867
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
868
- const { runMembershipGet } = await import('./commands/membership.js');
869
- await runMembershipGet(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
870
- });
871
- registerSubcommand(yargs, 'create', 'Create a membership', (y) => y.options({
872
- org: { type: 'string', demandOption: true },
873
- user: { type: 'string', demandOption: true },
874
- role: { type: 'string' },
875
- }), async (argv) => {
876
- await applyInsecureStorage(argv.insecureStorage);
877
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
878
- const { runMembershipCreate } = await import('./commands/membership.js');
879
- await runMembershipCreate({ org: argv.org, user: argv.user, role: argv.role }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
880
- });
881
- registerSubcommand(yargs, 'update <id>', 'Update a membership', (y) => y.positional('id', { type: 'string', demandOption: true }).option('role', { type: 'string' }), async (argv) => {
882
- await applyInsecureStorage(argv.insecureStorage);
883
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
884
- const { runMembershipUpdate } = await import('./commands/membership.js');
885
- await runMembershipUpdate(argv.id, argv.role, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
886
- });
887
- registerSubcommand(yargs, 'delete <id>', 'Delete a membership', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
888
- await applyInsecureStorage(argv.insecureStorage);
889
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
890
- const { runMembershipDelete } = await import('./commands/membership.js');
891
- await runMembershipDelete(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
892
- });
893
- registerSubcommand(yargs, 'deactivate <id>', 'Deactivate a membership', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
894
- await applyInsecureStorage(argv.insecureStorage);
895
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
896
- const { runMembershipDeactivate } = await import('./commands/membership.js');
897
- await runMembershipDeactivate(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
898
- });
899
- registerSubcommand(yargs, 'reactivate <id>', 'Reactivate a membership', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
900
- await applyInsecureStorage(argv.insecureStorage);
901
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
902
- const { runMembershipReactivate } = await import('./commands/membership.js');
903
- await runMembershipReactivate(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
904
- });
905
- return yargs.demandCommand(1, 'Please specify a membership subcommand').strict();
906
- })
907
- .command('invitation', 'Manage user invitations', (yargs) => {
908
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
909
- registerSubcommand(yargs, 'list', 'List invitations', (y) => y.options({
910
- org: { type: 'string' },
911
- email: { type: 'string' },
912
- limit: { type: 'number' },
913
- before: { type: 'string' },
914
- after: { type: 'string' },
915
- order: { type: 'string' },
916
- }), async (argv) => {
917
- await applyInsecureStorage(argv.insecureStorage);
918
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
919
- const { runInvitationList } = await import('./commands/invitation.js');
920
- await runInvitationList({
921
- org: argv.org,
922
- email: argv.email,
923
- limit: argv.limit,
924
- before: argv.before,
925
- after: argv.after,
926
- order: argv.order,
927
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
928
- });
929
- registerSubcommand(yargs, 'get <id>', 'Get an invitation', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
930
- await applyInsecureStorage(argv.insecureStorage);
931
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
932
- const { runInvitationGet } = await import('./commands/invitation.js');
933
- await runInvitationGet(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
934
- });
935
- registerSubcommand(yargs, 'send', 'Send an invitation', (y) => y.options({
936
- email: { type: 'string', demandOption: true },
937
- org: { type: 'string' },
938
- role: { type: 'string' },
939
- 'expires-in-days': { type: 'number' },
940
- }), async (argv) => {
941
- await applyInsecureStorage(argv.insecureStorage);
942
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
943
- const { runInvitationSend } = await import('./commands/invitation.js');
944
- await runInvitationSend({ email: argv.email, org: argv.org, role: argv.role, expiresInDays: argv.expiresInDays }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
945
- });
946
- registerSubcommand(yargs, 'revoke <id>', 'Revoke an invitation', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
947
- await applyInsecureStorage(argv.insecureStorage);
948
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
949
- const { runInvitationRevoke } = await import('./commands/invitation.js');
950
- await runInvitationRevoke(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
951
- });
952
- registerSubcommand(yargs, 'resend <id>', 'Resend an invitation', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
953
- await applyInsecureStorage(argv.insecureStorage);
954
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
955
- const { runInvitationResend } = await import('./commands/invitation.js');
956
- await runInvitationResend(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
957
- });
958
- return yargs.demandCommand(1, 'Please specify an invitation subcommand').strict();
959
- })
960
- .command('session', 'Manage user sessions', (yargs) => {
961
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
962
- registerSubcommand(yargs, 'list <userId>', 'List sessions for a user', (y) => y.positional('userId', { type: 'string', demandOption: true }).options({
963
- limit: { type: 'number' },
964
- before: { type: 'string' },
965
- after: { type: 'string' },
966
- order: { type: 'string' },
967
- }), async (argv) => {
968
- await applyInsecureStorage(argv.insecureStorage);
969
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
970
- const { runSessionList } = await import('./commands/session.js');
971
- await runSessionList(argv.userId, { limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
972
- });
973
- registerSubcommand(yargs, 'revoke <sessionId>', 'Revoke a session', (y) => y.positional('sessionId', { type: 'string', demandOption: true }), async (argv) => {
974
- await applyInsecureStorage(argv.insecureStorage);
975
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
976
- const { runSessionRevoke } = await import('./commands/session.js');
977
- await runSessionRevoke(argv.sessionId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
978
- });
979
- return yargs.demandCommand(1, 'Please specify a session subcommand').strict();
980
- })
981
- .command('connection', 'Manage SSO connections (read/delete)', (yargs) => {
982
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
983
- registerSubcommand(yargs, 'list', 'List connections', (y) => y.options({
984
- org: { type: 'string', describe: 'Filter by org ID' },
985
- type: { type: 'string', describe: 'Filter by connection type' },
986
- limit: { type: 'number' },
987
- before: { type: 'string' },
988
- after: { type: 'string' },
989
- order: { type: 'string' },
990
- }), async (argv) => {
991
- await applyInsecureStorage(argv.insecureStorage);
992
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
993
- const { runConnectionList } = await import('./commands/connection.js');
994
- await runConnectionList({
995
- organizationId: argv.org,
996
- connectionType: argv.type,
997
- limit: argv.limit,
998
- before: argv.before,
999
- after: argv.after,
1000
- order: argv.order,
1001
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1002
- });
1003
- registerSubcommand(yargs, 'get <id>', 'Get a connection', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1004
- await applyInsecureStorage(argv.insecureStorage);
1005
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1006
- const { runConnectionGet } = await import('./commands/connection.js');
1007
- await runConnectionGet(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1008
- });
1009
- registerSubcommand(yargs, 'delete <id>', 'Delete a connection', (y) => y
1010
- .positional('id', { type: 'string', demandOption: true })
1011
- .option('force', { type: 'boolean', default: false }), async (argv) => {
1012
- await applyInsecureStorage(argv.insecureStorage);
1013
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1014
- const { runConnectionDelete } = await import('./commands/connection.js');
1015
- await runConnectionDelete(argv.id, { force: argv.force }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1016
- });
1017
- return yargs.demandCommand(1, 'Please specify a connection subcommand').strict();
1018
- })
1019
- .command('directory', 'Manage directory sync (read/delete, list users/groups)', (yargs) => {
1020
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1021
- registerSubcommand(yargs, 'list', 'List directories', (y) => y.options({
1022
- org: { type: 'string' },
1023
- limit: { type: 'number' },
1024
- before: { type: 'string' },
1025
- after: { type: 'string' },
1026
- order: { type: 'string' },
1027
- }), async (argv) => {
1028
- await applyInsecureStorage(argv.insecureStorage);
1029
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1030
- const { runDirectoryList } = await import('./commands/directory.js');
1031
- await runDirectoryList({ organizationId: argv.org, limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1032
- });
1033
- registerSubcommand(yargs, 'get <id>', 'Get a directory', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1034
- await applyInsecureStorage(argv.insecureStorage);
1035
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1036
- const { runDirectoryGet } = await import('./commands/directory.js');
1037
- await runDirectoryGet(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1038
- });
1039
- registerSubcommand(yargs, 'delete <id>', 'Delete a directory', (y) => y
1040
- .positional('id', { type: 'string', demandOption: true })
1041
- .option('force', { type: 'boolean', default: false }), async (argv) => {
1042
- await applyInsecureStorage(argv.insecureStorage);
1043
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1044
- const { runDirectoryDelete } = await import('./commands/directory.js');
1045
- await runDirectoryDelete(argv.id, { force: argv.force }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1046
- });
1047
- registerSubcommand(yargs, 'list-users', 'List directory users', (y) => y.options({
1048
- directory: { type: 'string' },
1049
- group: { type: 'string' },
1050
- limit: { type: 'number' },
1051
- before: { type: 'string' },
1052
- after: { type: 'string' },
1053
- }), async (argv) => {
1054
- await applyInsecureStorage(argv.insecureStorage);
1055
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1056
- const { runDirectoryListUsers } = await import('./commands/directory.js');
1057
- await runDirectoryListUsers({ directory: argv.directory, group: argv.group, limit: argv.limit, before: argv.before, after: argv.after }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1058
- });
1059
- registerSubcommand(yargs, 'list-groups', 'List directory groups', (y) => y.options({
1060
- directory: { type: 'string', demandOption: true },
1061
- limit: { type: 'number' },
1062
- before: { type: 'string' },
1063
- after: { type: 'string' },
1064
- }), async (argv) => {
1065
- await applyInsecureStorage(argv.insecureStorage);
1066
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1067
- const { runDirectoryListGroups } = await import('./commands/directory.js');
1068
- await runDirectoryListGroups({ directory: argv.directory, limit: argv.limit, before: argv.before, after: argv.after }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1069
- });
1070
- return yargs.demandCommand(1, 'Please specify a directory subcommand').strict();
1071
- })
1072
- .command('event', 'Query WorkOS events', (yargs) => {
1073
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1074
- registerSubcommand(yargs, 'list', 'List events', (y) => y.options({
1075
- events: { type: 'string', demandOption: true, describe: 'Comma-separated event types' },
1076
- after: { type: 'string' },
1077
- org: { type: 'string' },
1078
- 'range-start': { type: 'string' },
1079
- 'range-end': { type: 'string' },
1080
- limit: { type: 'number' },
1081
- }), async (argv) => {
1082
- await applyInsecureStorage(argv.insecureStorage);
1083
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1084
- const { runEventList } = await import('./commands/event.js');
1085
- await runEventList({
1086
- events: argv.events.split(','),
1087
- after: argv.after,
1088
- organizationId: argv.org,
1089
- rangeStart: argv.rangeStart,
1090
- rangeEnd: argv.rangeEnd,
1091
- limit: argv.limit,
1092
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1093
- });
1094
- return yargs.demandCommand(1, 'Please specify an event subcommand').strict();
1095
- })
1096
- .command('audit-log', 'Manage audit logs', (yargs) => {
1097
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1098
- registerSubcommand(yargs, 'create-event <orgId>', 'Create an audit log event', (y) => y.positional('orgId', { type: 'string', demandOption: true }).options({
1099
- action: { type: 'string' },
1100
- 'actor-type': { type: 'string' },
1101
- 'actor-id': { type: 'string' },
1102
- 'actor-name': { type: 'string' },
1103
- targets: { type: 'string' },
1104
- context: { type: 'string' },
1105
- metadata: { type: 'string' },
1106
- 'occurred-at': { type: 'string' },
1107
- file: { type: 'string' },
1108
- }), async (argv) => {
1109
- await applyInsecureStorage(argv.insecureStorage);
1110
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1111
- const { runAuditLogCreateEvent } = await import('./commands/audit-log.js');
1112
- await runAuditLogCreateEvent(argv.orgId, {
1113
- action: argv.action,
1114
- actorType: argv.actorType,
1115
- actorId: argv.actorId,
1116
- actorName: argv.actorName,
1117
- targets: argv.targets,
1118
- context: argv.context,
1119
- metadata: argv.metadata,
1120
- occurredAt: argv.occurredAt,
1121
- file: argv.file,
1122
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1123
- });
1124
- registerSubcommand(yargs, 'export', 'Export audit logs', (y) => y.options({
1125
- org: { type: 'string', demandOption: true },
1126
- 'range-start': { type: 'string', demandOption: true },
1127
- 'range-end': { type: 'string', demandOption: true },
1128
- actions: { type: 'string' },
1129
- 'actor-names': { type: 'string' },
1130
- 'actor-ids': { type: 'string' },
1131
- targets: { type: 'string' },
1132
- }), async (argv) => {
1133
- await applyInsecureStorage(argv.insecureStorage);
1134
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1135
- const { runAuditLogExport } = await import('./commands/audit-log.js');
1136
- await runAuditLogExport({
1137
- organizationId: argv.org,
1138
- rangeStart: argv.rangeStart,
1139
- rangeEnd: argv.rangeEnd,
1140
- actions: argv.actions?.split(','),
1141
- actorNames: argv.actorNames?.split(','),
1142
- actorIds: argv.actorIds?.split(','),
1143
- targets: argv.targets?.split(','),
1144
- }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1145
- });
1146
- registerSubcommand(yargs, 'list-actions', 'List available audit log actions', (y) => y, async (argv) => {
1147
- await applyInsecureStorage(argv.insecureStorage);
1148
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1149
- const { runAuditLogListActions } = await import('./commands/audit-log.js');
1150
- await runAuditLogListActions(resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1151
- });
1152
- registerSubcommand(yargs, 'get-schema <action>', 'Get schema for an audit log action', (y) => y.positional('action', { type: 'string', demandOption: true }), async (argv) => {
1153
- await applyInsecureStorage(argv.insecureStorage);
1154
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1155
- const { runAuditLogGetSchema } = await import('./commands/audit-log.js');
1156
- await runAuditLogGetSchema(argv.action, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1157
- });
1158
- registerSubcommand(yargs, 'create-schema <action>', 'Create an audit log schema', (y) => y
1159
- .positional('action', { type: 'string', demandOption: true })
1160
- .option('file', { type: 'string', demandOption: true }), async (argv) => {
1161
- await applyInsecureStorage(argv.insecureStorage);
1162
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1163
- const { runAuditLogCreateSchema } = await import('./commands/audit-log.js');
1164
- await runAuditLogCreateSchema(argv.action, argv.file, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1165
- });
1166
- registerSubcommand(yargs, 'get-retention <orgId>', 'Get audit log retention period', (y) => y.positional('orgId', { type: 'string', demandOption: true }), async (argv) => {
1167
- await applyInsecureStorage(argv.insecureStorage);
1168
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1169
- const { runAuditLogGetRetention } = await import('./commands/audit-log.js');
1170
- await runAuditLogGetRetention(argv.orgId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1171
- });
1172
- return yargs.demandCommand(1, 'Please specify an audit-log subcommand').strict();
1173
- })
1174
- .command('feature-flag', 'Manage feature flags', (yargs) => {
1175
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1176
- registerSubcommand(yargs, 'list', 'List feature flags', (y) => y.options({
1177
- limit: { type: 'number' },
1178
- before: { type: 'string' },
1179
- after: { type: 'string' },
1180
- order: { type: 'string' },
1181
- }), async (argv) => {
1182
- await applyInsecureStorage(argv.insecureStorage);
1183
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1184
- const { runFeatureFlagList } = await import('./commands/feature-flag.js');
1185
- await runFeatureFlagList({ limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1186
- });
1187
- registerSubcommand(yargs, 'get <slug>', 'Get a feature flag', (y) => y.positional('slug', { type: 'string', demandOption: true }), async (argv) => {
1188
- await applyInsecureStorage(argv.insecureStorage);
1189
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1190
- const { runFeatureFlagGet } = await import('./commands/feature-flag.js');
1191
- await runFeatureFlagGet(argv.slug, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1192
- });
1193
- registerSubcommand(yargs, 'enable <slug>', 'Enable a feature flag', (y) => y.positional('slug', { type: 'string', demandOption: true }), async (argv) => {
1194
- await applyInsecureStorage(argv.insecureStorage);
1195
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1196
- const { runFeatureFlagEnable } = await import('./commands/feature-flag.js');
1197
- await runFeatureFlagEnable(argv.slug, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1198
- });
1199
- registerSubcommand(yargs, 'disable <slug>', 'Disable a feature flag', (y) => y.positional('slug', { type: 'string', demandOption: true }), async (argv) => {
1200
- await applyInsecureStorage(argv.insecureStorage);
1201
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1202
- const { runFeatureFlagDisable } = await import('./commands/feature-flag.js');
1203
- await runFeatureFlagDisable(argv.slug, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1204
- });
1205
- registerSubcommand(yargs, 'add-target <slug> <targetId>', 'Add a target to a feature flag', (y) => y
1206
- .positional('slug', { type: 'string', demandOption: true })
1207
- .positional('targetId', { type: 'string', demandOption: true }), async (argv) => {
1208
- await applyInsecureStorage(argv.insecureStorage);
1209
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1210
- const { runFeatureFlagAddTarget } = await import('./commands/feature-flag.js');
1211
- await runFeatureFlagAddTarget(argv.slug, argv.targetId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1212
- });
1213
- registerSubcommand(yargs, 'remove-target <slug> <targetId>', 'Remove a target from a feature flag', (y) => y
1214
- .positional('slug', { type: 'string', demandOption: true })
1215
- .positional('targetId', { type: 'string', demandOption: true }), async (argv) => {
1216
- await applyInsecureStorage(argv.insecureStorage);
1217
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1218
- const { runFeatureFlagRemoveTarget } = await import('./commands/feature-flag.js');
1219
- await runFeatureFlagRemoveTarget(argv.slug, argv.targetId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1220
- });
1221
- return yargs.demandCommand(1, 'Please specify a feature-flag subcommand').strict();
1222
- })
1223
- .command('webhook', 'Manage webhooks', (yargs) => {
1224
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1225
- registerSubcommand(yargs, 'list', 'List webhooks', (y) => y, async (argv) => {
1226
- await applyInsecureStorage(argv.insecureStorage);
1227
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1228
- const { runWebhookList } = await import('./commands/webhook.js');
1229
- await runWebhookList(resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1230
- });
1231
- registerSubcommand(yargs, 'create', 'Create a webhook', (y) => y.options({
1232
- url: { type: 'string', demandOption: true },
1233
- events: { type: 'string', demandOption: true, describe: 'Comma-separated event types' },
1234
- }), async (argv) => {
1235
- await applyInsecureStorage(argv.insecureStorage);
1236
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1237
- const { runWebhookCreate } = await import('./commands/webhook.js');
1238
- await runWebhookCreate(argv.url, argv.events.split(','), resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1239
- });
1240
- registerSubcommand(yargs, 'delete <id>', 'Delete a webhook', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1241
- await applyInsecureStorage(argv.insecureStorage);
1242
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1243
- const { runWebhookDelete } = await import('./commands/webhook.js');
1244
- await runWebhookDelete(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1245
- });
1246
- return yargs.demandCommand(1, 'Please specify a webhook subcommand').strict();
1247
- })
1248
- .command('config', 'Manage WorkOS configuration (redirect URIs, CORS, homepage)', (yargs) => {
1249
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1250
- yargs.command('redirect', 'Manage redirect URIs', (yargs) => {
1251
- registerSubcommand(yargs, 'add <uri>', 'Add a redirect URI', (y) => y.positional('uri', { type: 'string', demandOption: true }), async (argv) => {
1252
- await applyInsecureStorage(argv.insecureStorage);
1253
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1254
- const { runConfigRedirectAdd } = await import('./commands/config.js');
1255
- await runConfigRedirectAdd(argv.uri, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1256
- });
1257
- return yargs.demandCommand(1).strict();
1258
- });
1259
- yargs.command('cors', 'Manage CORS origins', (yargs) => {
1260
- registerSubcommand(yargs, 'add <origin>', 'Add a CORS origin', (y) => y.positional('origin', { type: 'string', demandOption: true }), async (argv) => {
1261
- await applyInsecureStorage(argv.insecureStorage);
1262
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1263
- const { runConfigCorsAdd } = await import('./commands/config.js');
1264
- await runConfigCorsAdd(argv.origin, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1265
- });
1266
- return yargs.demandCommand(1).strict();
1267
- });
1268
- yargs.command('homepage-url', 'Manage homepage URL', (yargs) => {
1269
- registerSubcommand(yargs, 'set <url>', 'Set the homepage URL', (y) => y.positional('url', { type: 'string', demandOption: true }), async (argv) => {
1270
- await applyInsecureStorage(argv.insecureStorage);
1271
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1272
- const { runConfigHomepageUrlSet } = await import('./commands/config.js');
1273
- await runConfigHomepageUrlSet(argv.url, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1274
- });
1275
- return yargs.demandCommand(1).strict();
1276
- });
1277
- return yargs.demandCommand(1, 'Please specify a config subcommand').strict();
1278
- })
1279
- .command('portal', 'Manage Admin Portal', (yargs) => {
1280
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1281
- registerSubcommand(yargs, 'generate-link', 'Generate an Admin Portal link', (y) => y.options({
1282
- intent: {
1283
- type: 'string',
1284
- demandOption: true,
1285
- describe: 'Portal intent (sso, dsync, audit_logs, log_streams)',
1286
- },
1287
- org: { type: 'string', demandOption: true, describe: 'Organization ID' },
1288
- 'return-url': { type: 'string' },
1289
- 'success-url': { type: 'string' },
1290
- }), async (argv) => {
1291
- await applyInsecureStorage(argv.insecureStorage);
1292
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1293
- const { runPortalGenerateLink } = await import('./commands/portal.js');
1294
- await runPortalGenerateLink({ intent: argv.intent, organization: argv.org, returnUrl: argv.returnUrl, successUrl: argv.successUrl }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1295
- });
1296
- return yargs.demandCommand(1, 'Please specify a portal subcommand').strict();
1297
- })
1298
- .command('vault', 'Manage WorkOS Vault secrets', (yargs) => {
1299
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1300
- registerSubcommand(yargs, 'list', 'List vault objects', (y) => y.options({
1301
- limit: { type: 'number' },
1302
- before: { type: 'string' },
1303
- after: { type: 'string' },
1304
- order: { type: 'string' },
1305
- }), async (argv) => {
1306
- await applyInsecureStorage(argv.insecureStorage);
1307
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1308
- const { runVaultList } = await import('./commands/vault.js');
1309
- await runVaultList({ limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1310
- });
1311
- registerSubcommand(yargs, 'get <id>', 'Get a vault object (metadata only; use --decrypt to include value)', (y) => y
1312
- .positional('id', { type: 'string', demandOption: true })
1313
- .option('decrypt', { type: 'boolean', default: false, describe: 'Include the decrypted secret value' }), async (argv) => {
1314
- await applyInsecureStorage(argv.insecureStorage);
1315
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1316
- const { runVaultGet } = await import('./commands/vault.js');
1317
- await runVaultGet(argv.id, argv.decrypt, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1318
- });
1319
- registerSubcommand(yargs, 'get-by-name <name>', 'Get a vault object by name (metadata only; use --decrypt to include value)', (y) => y
1320
- .positional('name', { type: 'string', demandOption: true })
1321
- .option('decrypt', { type: 'boolean', default: false, describe: 'Include the decrypted secret value' }), async (argv) => {
1322
- await applyInsecureStorage(argv.insecureStorage);
1323
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1324
- const { runVaultGetByName } = await import('./commands/vault.js');
1325
- await runVaultGetByName(argv.name, argv.decrypt, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1326
- });
1327
- registerSubcommand(yargs, 'create', 'Create a vault object (reads value from stdin when --value is omitted or -)', (y) => y.options({
1328
- name: { type: 'string', demandOption: true },
1329
- value: { type: 'string', describe: 'Secret value (omit or use - to read from stdin)' },
1330
- org: { type: 'string', demandOption: true, describe: 'Organization ID (required for key context)' },
1331
- }), async (argv) => {
1332
- await applyInsecureStorage(argv.insecureStorage);
1333
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1334
- const { runVaultCreate, readValueFromStdin } = await import('./commands/vault.js');
1335
- const value = argv.value === undefined || argv.value === '-' ? await readValueFromStdin() : argv.value;
1336
- await runVaultCreate({ name: argv.name, value, org: argv.org }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1337
- });
1338
- registerSubcommand(yargs, 'update <id>', 'Update a vault object (reads value from stdin when --value is omitted or -)', (y) => y.positional('id', { type: 'string', demandOption: true }).options({
1339
- value: { type: 'string', describe: 'New value (omit or use - to read from stdin)' },
1340
- 'version-check': { type: 'string' },
1341
- }), async (argv) => {
1342
- await applyInsecureStorage(argv.insecureStorage);
1343
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1344
- const { runVaultUpdate, readValueFromStdin } = await import('./commands/vault.js');
1345
- const value = argv.value === undefined || argv.value === '-' ? await readValueFromStdin() : argv.value;
1346
- await runVaultUpdate({ id: argv.id, value, versionCheck: argv.versionCheck }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1347
- });
1348
- registerSubcommand(yargs, 'delete <id>', 'Delete a vault object', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1349
- await applyInsecureStorage(argv.insecureStorage);
1350
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1351
- const { runVaultDelete } = await import('./commands/vault.js');
1352
- await runVaultDelete(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1353
- });
1354
- registerSubcommand(yargs, 'describe <id>', 'Describe a vault object', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1355
- await applyInsecureStorage(argv.insecureStorage);
1356
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1357
- const { runVaultDescribe } = await import('./commands/vault.js');
1358
- await runVaultDescribe(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1359
- });
1360
- registerSubcommand(yargs, 'list-versions <id>', 'List vault object versions', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1361
- await applyInsecureStorage(argv.insecureStorage);
1362
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1363
- const { runVaultListVersions } = await import('./commands/vault.js');
1364
- await runVaultListVersions(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1365
- });
1366
- registerSubcommand(yargs, 'run', 'Run a command with Vault secrets injected as environment variables', (y) => y.options({
1367
- secret: {
1368
- type: 'string',
1369
- array: true,
1370
- describe: 'Map a vault object to an env var: ENV_VAR=vault-name (repeatable)',
1371
- demandOption: true,
1372
- },
1373
- env: { type: 'string', describe: 'Environment name to read API key from (defaults to active)' },
1374
- 'dry-run': { type: 'boolean', default: false, describe: 'Print which secrets would be injected, no fetch' },
1375
- }), async (argv) => {
1376
- await applyInsecureStorage(argv.insecureStorage);
1377
- const { runVaultRun } = await import('./commands/vault-run.js');
1378
- const childCommand = argv['--'] ?? [];
1379
- const exitCode = await runVaultRun({
1380
- secrets: argv.secret,
1381
- command: childCommand,
1382
- env: argv.env,
1383
- dryRun: argv.dryRun,
1384
- }, argv.apiKey);
1385
- if (typeof exitCode === 'number')
1386
- process.exit(exitCode);
1387
- });
1388
- return yargs.demandCommand(1, 'Please specify a vault subcommand').strict();
1389
- })
1390
- .command('api-key', 'Manage API keys', (yargs) => {
1391
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1392
- registerSubcommand(yargs, 'list', 'List API keys', (y) => y.options({
1393
- org: { type: 'string', demandOption: true },
1394
- limit: { type: 'number' },
1395
- before: { type: 'string' },
1396
- after: { type: 'string' },
1397
- order: { type: 'string' },
1398
- }), async (argv) => {
1399
- await applyInsecureStorage(argv.insecureStorage);
1400
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1401
- const { runApiKeyList } = await import('./commands/api-key-mgmt.js');
1402
- await runApiKeyList({ organizationId: argv.org, limit: argv.limit, before: argv.before, after: argv.after, order: argv.order }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1403
- });
1404
- registerSubcommand(yargs, 'create', 'Create an API key', (y) => y.options({
1405
- org: { type: 'string', demandOption: true },
1406
- name: { type: 'string', demandOption: true },
1407
- permissions: { type: 'string', describe: 'Comma-separated permissions' },
1408
- }), async (argv) => {
1409
- await applyInsecureStorage(argv.insecureStorage);
1410
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1411
- const { runApiKeyCreate } = await import('./commands/api-key-mgmt.js');
1412
- await runApiKeyCreate({ organizationId: argv.org, name: argv.name, permissions: argv.permissions?.split(',') }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1413
- });
1414
- registerSubcommand(yargs, 'validate <value>', 'Validate an API key', (y) => y.positional('value', { type: 'string', demandOption: true }), async (argv) => {
1415
- await applyInsecureStorage(argv.insecureStorage);
1416
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1417
- const { runApiKeyValidate } = await import('./commands/api-key-mgmt.js');
1418
- await runApiKeyValidate(argv.value, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1419
- });
1420
- registerSubcommand(yargs, 'delete <id>', 'Delete an API key', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1421
- await applyInsecureStorage(argv.insecureStorage);
1422
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1423
- const { runApiKeyDelete } = await import('./commands/api-key-mgmt.js');
1424
- await runApiKeyDelete(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1425
- });
1426
- return yargs.demandCommand(1, 'Please specify an api-key subcommand').strict();
1427
- })
1428
- .command('org-domain', 'Manage organization domains', (yargs) => {
1429
- yargs.options({ ...insecureStorageOption, 'api-key': { type: 'string', describe: 'WorkOS API key' } });
1430
- registerSubcommand(yargs, 'get <id>', 'Get a domain', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1431
- await applyInsecureStorage(argv.insecureStorage);
1432
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1433
- const { runOrgDomainGet } = await import('./commands/org-domain.js');
1434
- await runOrgDomainGet(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1435
- });
1436
- registerSubcommand(yargs, 'create <domain>', 'Create a domain', (y) => y
1437
- .positional('domain', { type: 'string', demandOption: true })
1438
- .option('org', { type: 'string', demandOption: true }), async (argv) => {
1439
- await applyInsecureStorage(argv.insecureStorage);
1440
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1441
- const { runOrgDomainCreate } = await import('./commands/org-domain.js');
1442
- await runOrgDomainCreate(argv.domain, argv.org, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1443
- });
1444
- registerSubcommand(yargs, 'verify <id>', 'Verify a domain', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1445
- await applyInsecureStorage(argv.insecureStorage);
1446
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1447
- const { runOrgDomainVerify } = await import('./commands/org-domain.js');
1448
- await runOrgDomainVerify(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1449
- });
1450
- registerSubcommand(yargs, 'delete <id>', 'Delete a domain', (y) => y.positional('id', { type: 'string', demandOption: true }), async (argv) => {
1451
- await applyInsecureStorage(argv.insecureStorage);
1452
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1453
- const { runOrgDomainDelete } = await import('./commands/org-domain.js');
1454
- await runOrgDomainDelete(argv.id, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1455
- });
1456
- return yargs.demandCommand(1, 'Please specify an org-domain subcommand').strict();
1457
- })
1458
- // --- Workflow Commands ---
1459
- .command('seed', 'Seed WorkOS environment from a YAML config file', (yargs) => yargs.options({
1460
- ...insecureStorageOption,
1461
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
1462
- file: { type: 'string', describe: 'Path to seed YAML file' },
1463
- clean: { type: 'boolean', default: false, describe: 'Tear down seeded resources' },
1464
- init: { type: 'boolean', default: false, describe: 'Create an example workos-seed.yml file' },
1465
- }), async (argv) => {
1466
- await applyInsecureStorage(argv.insecureStorage);
1467
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1468
- const { runSeed } = await import('./commands/seed.js');
1469
- await runSeed({ file: argv.file, clean: argv.clean, init: argv.init }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1470
- })
1471
- .command('setup', 'Set up your coding agent (install WorkOS skills + MCP server)', (yargs) => yargs.options({
1472
- ...insecureStorageOption,
1473
- agents: { type: 'string', describe: 'Comma-separated agent keys (claude-code, codex, cursor, goose)' },
1474
- 'skills-only': { type: 'boolean', describe: 'Install skills only (skip the MCP server)' },
1475
- 'mcp-only': { type: 'boolean', describe: 'Install the MCP server only (skip skills)' },
1476
- yes: { type: 'boolean', alias: 'y', describe: 'Install without prompting' },
1477
- reset: { type: 'boolean', describe: 'Re-enable automatic setup offers after a decline' },
1478
- }), async (argv) => {
1479
- await applyInsecureStorage(argv.insecureStorage);
1480
- const { runSetup } = await import('./commands/setup.js');
1481
- await runSetup({
1482
- trigger: 'command',
1483
- agents: argv.agents
1484
- ? String(argv.agents)
1485
- .split(',')
1486
- .map((a) => a.trim())
1487
- .filter(Boolean)
1488
- : undefined,
1489
- skillsOnly: argv.skillsOnly,
1490
- mcpOnly: argv.mcpOnly,
1491
- assumeYes: argv.yes,
1492
- reset: argv.reset,
1493
- });
1494
- })
1495
- .command('setup-org <name>', 'One-shot organization onboarding (create org, domain, roles, portal link)', (yargs) => yargs.positional('name', { type: 'string', demandOption: true, describe: 'Organization name' }).options({
1496
- ...insecureStorageOption,
1497
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
1498
- domain: { type: 'string', describe: 'Domain to add and verify' },
1499
- roles: { type: 'string', describe: 'Comma-separated role slugs to create' },
1500
- }), async (argv) => {
1501
- await applyInsecureStorage(argv.insecureStorage);
1502
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1503
- const { runSetupOrg } = await import('./commands/setup-org.js');
1504
- await runSetupOrg({ name: argv.name, domain: argv.domain, roles: argv.roles?.split(',') }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1505
- })
1506
- .command('onboard-user <email>', 'Onboard a user (send invitation, assign role)', (yargs) => yargs.positional('email', { type: 'string', demandOption: true }).options({
1507
- ...insecureStorageOption,
1508
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
1509
- org: { type: 'string', demandOption: true, describe: 'Organization ID' },
1510
- role: { type: 'string', describe: 'Role slug to assign' },
1511
- wait: { type: 'boolean', default: false, describe: 'Wait for invitation acceptance' },
1512
- }), async (argv) => {
1513
- await applyInsecureStorage(argv.insecureStorage);
1514
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1515
- const { runOnboardUser } = await import('./commands/onboard-user.js');
1516
- await runOnboardUser({ email: argv.email, org: argv.org, role: argv.role, wait: argv.wait }, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1517
- })
1518
- .command('debug-sso <connectionId>', 'Diagnose SSO connection issues', (yargs) => yargs.positional('connectionId', { type: 'string', demandOption: true }).options({
1519
- ...insecureStorageOption,
1520
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
1521
- }), async (argv) => {
1522
- await applyInsecureStorage(argv.insecureStorage);
1523
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1524
- const { runDebugSso } = await import('./commands/debug-sso.js');
1525
- await runDebugSso(argv.connectionId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1526
- })
1527
- .command('debug-sync <directoryId>', 'Diagnose directory sync issues', (yargs) => yargs.positional('directoryId', { type: 'string', demandOption: true }).options({
1528
- ...insecureStorageOption,
1529
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
1530
- }), async (argv) => {
1531
- await applyInsecureStorage(argv.insecureStorage);
1532
- const { resolveApiKey, resolveApiBaseUrl } = await import('./lib/api-key.js');
1533
- const { runDebugSync } = await import('./commands/debug-sync.js');
1534
- await runDebugSync(argv.directoryId, resolveApiKey({ apiKey: argv.apiKey }), resolveApiBaseUrl());
1535
- })
1536
- // Alias — canonical command is `workos env claim`
1537
- .command('claim', 'Claim an unclaimed WorkOS environment — link it to your account (permanent — cannot be undone)', (yargs) => yargs.options({
1538
- ...insecureStorageOption,
1539
- }), async (argv) => {
1540
- await applyInsecureStorage(argv.insecureStorage);
1541
- const { runClaim } = await import('./commands/claim.js');
1542
- await runClaim();
1543
- })
1544
- .command('install', 'Install WorkOS AuthKit into your project (interactive framework detection and setup)', (yargs) => yargs.options(installerOptions), async (argv) => {
1545
- await applyInsecureStorage(argv.insecureStorage);
1546
- await resolveInstallCredentials(argv.apiKey, argv.installDir, argv.skipAuth, ensureAuthenticated);
1547
- const { handleInstall } = await import('./commands/install.js');
1548
- await handleInstall(argv);
1549
- })
1550
- .command('dev', false, // Hidden: unreleased beta feature
1551
- (yargs) => yargs.options({
1552
- port: { type: 'number', default: 4100, describe: 'Emulator port' },
1553
- seed: { type: 'string', describe: 'Path to seed config file' },
1554
- }), async (argv) => {
1555
- const { runDev } = await import('./commands/dev.js');
1556
- await runDev({
1557
- port: argv.port,
1558
- seed: argv.seed,
1559
- '--': argv['--'],
1560
- });
1561
- })
1562
- .command('emulate', 'Start a local WorkOS API emulator', (yargs) => yargs.options({
1563
- port: {
1564
- alias: 'p',
1565
- type: 'number',
1566
- default: 4100,
1567
- describe: 'Port to listen on',
1568
- },
1569
- seed: {
1570
- alias: 's',
1571
- type: 'string',
1572
- describe: 'Path to seed config file (YAML or JSON)',
1573
- },
1574
- interactive: {
1575
- alias: 'i',
1576
- type: 'boolean',
1577
- default: false,
1578
- describe: 'Show login pages for SSO/AuthKit',
1579
- },
1580
- }), async (argv) => {
1581
- const { runEmulate } = await import('./commands/emulate.js');
1582
- await runEmulate({
1583
- port: argv.port,
1584
- seed: argv.seed,
1585
- json: argv.json,
1586
- interactive: argv.interactive,
1587
- });
1588
- })
1589
- .command('debug', false, (yargs) => {
1590
- yargs.options(insecureStorageOption);
1591
- registerSubcommand(yargs, 'state', 'Dump raw CLI state (credentials, config, storage)', (y) => y.option('show-secrets', {
1592
- type: 'boolean',
1593
- default: false,
1594
- describe: 'Show unredacted tokens and API keys',
1595
- }), async (argv) => {
1596
- await applyInsecureStorage(argv.insecureStorage);
1597
- const { runDebugState } = await import('./commands/debug.js');
1598
- await runDebugState({ showSecrets: argv.showSecrets });
1599
- });
1600
- registerSubcommand(yargs, 'reset', 'Clear auth state (keyring + files)', (y) => y
1601
- .option('force', {
1602
- type: 'boolean',
1603
- default: false,
1604
- describe: 'Skip confirmation prompt',
1605
- })
1606
- .option('credentials-only', {
1607
- type: 'boolean',
1608
- default: false,
1609
- describe: 'Only clear credentials',
1610
- })
1611
- .option('config-only', {
1612
- type: 'boolean',
1613
- default: false,
1614
- describe: 'Only clear config',
1615
- }), async (argv) => {
1616
- await applyInsecureStorage(argv.insecureStorage);
1617
- const { runDebugReset } = await import('./commands/debug.js');
1618
- await runDebugReset({
1619
- force: argv.force,
1620
- credentialsOnly: argv.credentialsOnly,
1621
- configOnly: argv.configOnly,
1622
- });
1623
- });
1624
- registerSubcommand(yargs, 'simulate', 'Simulate CLI states for testing', (y) => y
1625
- .option('expired-token', {
1626
- type: 'boolean',
1627
- default: false,
1628
- describe: 'Set token expiresAt to the past',
1629
- })
1630
- .option('no-keyring', {
1631
- type: 'boolean',
1632
- default: false,
1633
- describe: 'Force file-only storage mode',
1634
- })
1635
- .option('unclaimed', {
1636
- type: 'boolean',
1637
- default: false,
1638
- describe: 'Write synthetic unclaimed environment',
1639
- })
1640
- .option('no-auth', {
1641
- type: 'boolean',
1642
- default: false,
1643
- describe: 'Clear credentials, keep config',
1644
- })
1645
- .option('crash', {
1646
- type: 'boolean',
1647
- default: false,
1648
- describe: 'Throw an unexpected error to exercise the crash-telemetry path',
1649
- }), async (argv) => {
1650
- await applyInsecureStorage(argv.insecureStorage);
1651
- const { runDebugSimulate } = await import('./commands/debug.js');
1652
- await runDebugSimulate({
1653
- expiredToken: argv.expiredToken,
1654
- noKeyring: argv.noKeyring,
1655
- unclaimed: argv.unclaimed,
1656
- noAuth: argv.noAuth,
1657
- crash: argv.crash,
1658
- });
1659
- });
1660
- registerSubcommand(yargs, 'env', 'Show WORKOS_* environment variables and their effects', (y) => y, async () => {
1661
- const { runDebugEnv } = await import('./commands/debug.js');
1662
- await runDebugEnv();
1663
- });
1664
- registerSubcommand(yargs, 'token', 'Decode and inspect the current access token', (y) => y, async (argv) => {
1665
- await applyInsecureStorage(argv.insecureStorage);
1666
- const { runDebugToken } = await import('./commands/debug.js');
1667
- await runDebugToken();
1668
- });
1669
- return yargs.demandCommand(1, `Run "${getWorkOSCommand()} debug <command>" for debug tools.`).strict();
1670
- })
1671
- .command('migrations', MIGRATIONS_DESCRIPTION, (yargs) => yargs
1672
- .strictCommands(false)
1673
- .strict(false)
1674
- .help(false)
1675
- .version(false)
1676
- .options({
1677
- ...insecureStorageOption,
1678
- 'api-key': { type: 'string', describe: 'WorkOS API key' },
1679
- }), async (argv) => {
1680
- await applyInsecureStorage(argv.insecureStorage);
1681
- const { resolveOptionalApiKey } = await import('./lib/api-key.js');
1682
- const { getActiveEnvironment } = await import('./lib/config-store.js');
1683
- const { getMigrationsPassthroughArgs, runMigrations } = await import('./commands/migrations.js');
1684
- const passthrough = getMigrationsPassthroughArgs(rawArgs);
1685
- const endpoint = getActiveEnvironment()?.endpoint;
1686
- await runMigrations(passthrough, resolveOptionalApiKey({ apiKey: argv.apiKey }), endpoint);
1687
- })
1688
- .command('dashboard', false, // hidden from help
1689
- (yargs) => yargs.options(installerOptions), async (argv) => {
1690
- await applyInsecureStorage(argv.insecureStorage);
1691
- await resolveInstallCredentials(argv.apiKey, argv.installDir, argv.skipAuth, ensureAuthenticated);
1692
- const { handleInstall } = await import('./commands/install.js');
1693
- await handleInstall({ ...argv, dashboard: true });
1694
- })
1695
- .command(['$0'], 'WorkOS AuthKit CLI', (yargs) => yargs.options(insecureStorageOption), async (argv) => {
1696
- // Non-human modes: emit machine-readable command tree (JSON) or the
1697
- // fully-configured parser help (human non-TTY edge) instead of prompting.
1698
- if (!isPromptAllowed()) {
1699
- if (isJsonMode()) {
1700
- const { buildCommandTree } = await import('./utils/help-json.js');
1701
- outputJson(buildCommandTree());
1702
- }
1703
- else {
1704
- parser.showHelp();
1705
- }
1706
- return;
1707
- }
1708
- // TTY: ask if user wants to run installer
1709
- const shouldInstall = await ui.confirm({
1710
- message: 'Run the AuthKit installer?',
1711
- });
1712
- if (ui.isCancel(shouldInstall) || !shouldInstall) {
1713
- return;
1714
- }
1715
- await applyInsecureStorage(argv.insecureStorage);
1716
- await resolveInstallCredentials(undefined, undefined, false, ensureAuthenticated);
1717
- const { handleInstall } = await import('./commands/install.js');
1718
- await handleInstall({ ...argv, dashboard: false });
1719
- })
1720
- .strict()
1721
- .help()
1722
- .alias('help', 'h')
1723
- .version(getVersion())
1724
- .alias('version', 'v')
1725
- .wrap(process.stdout.isTTY && process.stdout.columns ? process.stdout.columns : 80);
1726
- const shouldSkipTelemetry = () => !isTelemetryEnabled() || SKIP_TELEMETRY_COMMANDS.has(commandName.split('.')[0]);
1727
- let commandOutcome;
1728
- try {
1729
- await parser.parseAsync(rawArgs);
1730
- process.exitCode = 0;
1731
- commandOutcome = {
1732
- success: true,
1733
- options: {
1734
- flags,
1735
- reason: 'success',
1736
- },
1737
- };
1738
- }
1739
- catch (error) {
1740
- if (error instanceof CliExit) {
1741
- process.exitCode = error.exitCode;
1742
- commandOutcome = {
1743
- success: error.exitCode === 0,
1744
- options: {
1745
- flags,
1746
- reason: error.context?.reason,
1747
- errorCode: error.context?.errorCode,
1748
- apiContext: error.context?.apiContext,
1749
- },
1750
- };
1751
- }
1752
- else if (error instanceof PromptUnavailableError) {
1753
- // A prompt was attempted where the user can't answer (--json, or non-TTY
1754
- // stdin) on a direct command. Not a crash — surface a clear, structured
1755
- // error with its own code so scripts and telemetry can distinguish it.
1756
- process.exitCode = 1;
1757
- commandOutcome = {
1758
- success: false,
1759
- options: { flags, reason: 'validation_error', errorCode: 'prompt_unavailable' },
1760
- };
1761
- outputError({ code: 'prompt_unavailable', message: error.message });
1762
- }
1763
- else {
1764
- // Unexpected error (crash)
1765
- process.exitCode = 1;
1766
- const err = error instanceof Error ? error : new Error(String(error));
1767
- commandOutcome = {
1768
- success: false,
1769
- options: {
1770
- flags,
1771
- reason: 'crash',
1772
- error: err,
1773
- },
1774
- };
1775
- analytics.captureUnhandledCrash(err, { command: commandName });
1776
- // Don't exit silently on an unexpected error. Surface a sanitized
1777
- // message (secrets/paths stripped) so the user gets a diagnostic instead
1778
- // of a bare exit code 1. Full details are in the crash log / telemetry.
1779
- outputError({ code: 'internal_error', message: sanitizeMessage(err.message) });
1780
- }
1781
- }
1782
- finally {
1783
- if (commandOutcome && !shouldSkipTelemetry()) {
1784
- analytics.emitCommandEvent(commandName, Date.now() - startTime, commandOutcome.success, commandOutcome.options);
1785
- }
1786
- await telemetryClient.flush().catch(() => { });
1787
- }
1788
- }
1789
- runCli();
1790
- //# sourceMappingURL=bin.js.map