workos 0.19.0 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/README.md +4 -646
  2. package/bin/workos.js +44 -0
  3. package/package.json +18 -99
  4. package/LICENSE +0 -47
  5. package/dist/bin.d.ts +0 -2
  6. package/dist/bin.js +0 -1790
  7. package/dist/bin.js.map +0 -1
  8. package/dist/cli.config.d.ts +0 -88
  9. package/dist/cli.config.js +0 -110
  10. package/dist/cli.config.js.map +0 -1
  11. package/dist/commands/api/catalog.d.ts +0 -23
  12. package/dist/commands/api/catalog.js +0 -97
  13. package/dist/commands/api/catalog.js.map +0 -1
  14. package/dist/commands/api/format.d.ts +0 -5
  15. package/dist/commands/api/format.js +0 -46
  16. package/dist/commands/api/format.js.map +0 -1
  17. package/dist/commands/api/index.d.ts +0 -15
  18. package/dist/commands/api/index.js +0 -213
  19. package/dist/commands/api/index.js.map +0 -1
  20. package/dist/commands/api/interactive.d.ts +0 -3
  21. package/dist/commands/api/interactive.js +0 -133
  22. package/dist/commands/api/interactive.js.map +0 -1
  23. package/dist/commands/api/request.d.ts +0 -14
  24. package/dist/commands/api/request.js +0 -38
  25. package/dist/commands/api/request.js.map +0 -1
  26. package/dist/commands/api-key-mgmt.d.ts +0 -16
  27. package/dist/commands/api-key-mgmt.js +0 -96
  28. package/dist/commands/api-key-mgmt.js.map +0 -1
  29. package/dist/commands/audit-log.d.ts +0 -26
  30. package/dist/commands/audit-log.js +0 -155
  31. package/dist/commands/audit-log.js.map +0 -1
  32. package/dist/commands/auth-status.d.ts +0 -1
  33. package/dist/commands/auth-status.js +0 -57
  34. package/dist/commands/auth-status.js.map +0 -1
  35. package/dist/commands/claim.d.ts +0 -11
  36. package/dist/commands/claim.js +0 -143
  37. package/dist/commands/claim.js.map +0 -1
  38. package/dist/commands/config.d.ts +0 -3
  39. package/dist/commands/config.js +0 -54
  40. package/dist/commands/config.js.map +0 -1
  41. package/dist/commands/connection.d.ts +0 -13
  42. package/dist/commands/connection.js +0 -96
  43. package/dist/commands/connection.js.map +0 -1
  44. package/dist/commands/debug-sso.d.ts +0 -1
  45. package/dist/commands/debug-sso.js +0 -78
  46. package/dist/commands/debug-sso.js.map +0 -1
  47. package/dist/commands/debug-sync.d.ts +0 -1
  48. package/dist/commands/debug-sync.js +0 -102
  49. package/dist/commands/debug-sync.js.map +0 -1
  50. package/dist/commands/debug.d.ts +0 -28
  51. package/dist/commands/debug.js +0 -406
  52. package/dist/commands/debug.js.map +0 -1
  53. package/dist/commands/dev.d.ts +0 -22
  54. package/dist/commands/dev.js +0 -145
  55. package/dist/commands/dev.js.map +0 -1
  56. package/dist/commands/directory.d.ts +0 -27
  57. package/dist/commands/directory.js +0 -176
  58. package/dist/commands/directory.js.map +0 -1
  59. package/dist/commands/doctor.d.ts +0 -12
  60. package/dist/commands/doctor.js +0 -41
  61. package/dist/commands/doctor.js.map +0 -1
  62. package/dist/commands/emulate.d.ts +0 -7
  63. package/dist/commands/emulate.js +0 -69
  64. package/dist/commands/emulate.js.map +0 -1
  65. package/dist/commands/env.d.ts +0 -19
  66. package/dist/commands/env.js +0 -303
  67. package/dist/commands/env.js.map +0 -1
  68. package/dist/commands/event.d.ts +0 -9
  69. package/dist/commands/event.js +0 -43
  70. package/dist/commands/event.js.map +0 -1
  71. package/dist/commands/feature-flag.d.ts +0 -12
  72. package/dist/commands/feature-flag.js +0 -96
  73. package/dist/commands/feature-flag.js.map +0 -1
  74. package/dist/commands/install-skill.d.ts +0 -85
  75. package/dist/commands/install-skill.js +0 -332
  76. package/dist/commands/install-skill.js.map +0 -1
  77. package/dist/commands/install.d.ts +0 -6
  78. package/dist/commands/install.js +0 -51
  79. package/dist/commands/install.js.map +0 -1
  80. package/dist/commands/invitation.d.ts +0 -19
  81. package/dist/commands/invitation.js +0 -94
  82. package/dist/commands/invitation.js.map +0 -1
  83. package/dist/commands/list-skills.d.ts +0 -4
  84. package/dist/commands/list-skills.js +0 -52
  85. package/dist/commands/list-skills.js.map +0 -1
  86. package/dist/commands/login.d.ts +0 -32
  87. package/dist/commands/login.js +0 -239
  88. package/dist/commands/login.js.map +0 -1
  89. package/dist/commands/logout.d.ts +0 -1
  90. package/dist/commands/logout.js +0 -17
  91. package/dist/commands/logout.js.map +0 -1
  92. package/dist/commands/mcp.d.ts +0 -14
  93. package/dist/commands/mcp.js +0 -99
  94. package/dist/commands/mcp.js.map +0 -1
  95. package/dist/commands/membership.d.ts +0 -20
  96. package/dist/commands/membership.js +0 -129
  97. package/dist/commands/membership.js.map +0 -1
  98. package/dist/commands/migrations.d.ts +0 -2
  99. package/dist/commands/migrations.js +0 -50
  100. package/dist/commands/migrations.js.map +0 -1
  101. package/dist/commands/onboard-user.d.ts +0 -7
  102. package/dist/commands/onboard-user.js +0 -61
  103. package/dist/commands/onboard-user.js.map +0 -1
  104. package/dist/commands/org-domain.d.ts +0 -4
  105. package/dist/commands/org-domain.js +0 -45
  106. package/dist/commands/org-domain.js.map +0 -1
  107. package/dist/commands/organization.d.ts +0 -14
  108. package/dist/commands/organization.js +0 -103
  109. package/dist/commands/organization.js.map +0 -1
  110. package/dist/commands/permission.d.ts +0 -20
  111. package/dist/commands/permission.js +0 -93
  112. package/dist/commands/permission.js.map +0 -1
  113. package/dist/commands/portal.d.ts +0 -7
  114. package/dist/commands/portal.js +0 -26
  115. package/dist/commands/portal.js.map +0 -1
  116. package/dist/commands/role.d.ts +0 -17
  117. package/dist/commands/role.js +0 -122
  118. package/dist/commands/role.js.map +0 -1
  119. package/dist/commands/seed.d.ts +0 -6
  120. package/dist/commands/seed.js +0 -298
  121. package/dist/commands/seed.js.map +0 -1
  122. package/dist/commands/session.d.ts +0 -8
  123. package/dist/commands/session.js +0 -63
  124. package/dist/commands/session.js.map +0 -1
  125. package/dist/commands/setup-org.d.ts +0 -6
  126. package/dist/commands/setup-org.js +0 -99
  127. package/dist/commands/setup-org.js.map +0 -1
  128. package/dist/commands/setup.d.ts +0 -50
  129. package/dist/commands/setup.js +0 -237
  130. package/dist/commands/setup.js.map +0 -1
  131. package/dist/commands/telemetry.d.ts +0 -3
  132. package/dist/commands/telemetry.js +0 -88
  133. package/dist/commands/telemetry.js.map +0 -1
  134. package/dist/commands/uninstall-skill.d.ts +0 -11
  135. package/dist/commands/uninstall-skill.js +0 -117
  136. package/dist/commands/uninstall-skill.js.map +0 -1
  137. package/dist/commands/user.d.ts +0 -19
  138. package/dist/commands/user.js +0 -92
  139. package/dist/commands/user.js.map +0 -1
  140. package/dist/commands/vault-run.d.ts +0 -13
  141. package/dist/commands/vault-run.js +0 -195
  142. package/dist/commands/vault-run.js.map +0 -1
  143. package/dist/commands/vault.d.ts +0 -25
  144. package/dist/commands/vault.js +0 -153
  145. package/dist/commands/vault.js.map +0 -1
  146. package/dist/commands/verify-login.d.ts +0 -25
  147. package/dist/commands/verify-login.js +0 -158
  148. package/dist/commands/verify-login.js.map +0 -1
  149. package/dist/commands/webhook.d.ts +0 -3
  150. package/dist/commands/webhook.js +0 -92
  151. package/dist/commands/webhook.js.map +0 -1
  152. package/dist/craft-pre-release.sh +0 -10
  153. package/dist/dashboard/components/AnimatedLogo.d.ts +0 -8
  154. package/dist/dashboard/components/AnimatedLogo.js +0 -16
  155. package/dist/dashboard/components/AnimatedLogo.js.map +0 -1
  156. package/dist/dashboard/components/CompletionView.d.ts +0 -13
  157. package/dist/dashboard/components/CompletionView.js +0 -25
  158. package/dist/dashboard/components/CompletionView.js.map +0 -1
  159. package/dist/dashboard/components/ConfirmPrompt.d.ts +0 -9
  160. package/dist/dashboard/components/ConfirmPrompt.js +0 -25
  161. package/dist/dashboard/components/ConfirmPrompt.js.map +0 -1
  162. package/dist/dashboard/components/CredentialsForm.d.ts +0 -10
  163. package/dist/dashboard/components/CredentialsForm.js +0 -47
  164. package/dist/dashboard/components/CredentialsForm.js.map +0 -1
  165. package/dist/dashboard/components/Dashboard.d.ts +0 -3
  166. package/dist/dashboard/components/Dashboard.js +0 -100
  167. package/dist/dashboard/components/Dashboard.js.map +0 -1
  168. package/dist/dashboard/components/DashboardLayout.d.ts +0 -24
  169. package/dist/dashboard/components/DashboardLayout.js +0 -25
  170. package/dist/dashboard/components/DashboardLayout.js.map +0 -1
  171. package/dist/dashboard/components/DiffPanel.d.ts +0 -9
  172. package/dist/dashboard/components/DiffPanel.js +0 -136
  173. package/dist/dashboard/components/DiffPanel.js.map +0 -1
  174. package/dist/dashboard/components/InlinePrompt.d.ts +0 -8
  175. package/dist/dashboard/components/InlinePrompt.js +0 -19
  176. package/dist/dashboard/components/InlinePrompt.js.map +0 -1
  177. package/dist/dashboard/components/OutputPanel.d.ts +0 -10
  178. package/dist/dashboard/components/OutputPanel.js +0 -100
  179. package/dist/dashboard/components/OutputPanel.js.map +0 -1
  180. package/dist/dashboard/components/Panel.d.ts +0 -12
  181. package/dist/dashboard/components/Panel.js +0 -6
  182. package/dist/dashboard/components/Panel.js.map +0 -1
  183. package/dist/dashboard/components/TextInput.d.ts +0 -13
  184. package/dist/dashboard/components/TextInput.js +0 -57
  185. package/dist/dashboard/components/TextInput.js.map +0 -1
  186. package/dist/dashboard/components/WelcomeArt.d.ts +0 -2
  187. package/dist/dashboard/components/WelcomeArt.js +0 -9
  188. package/dist/dashboard/components/WelcomeArt.js.map +0 -1
  189. package/dist/dashboard/hooks/useAnimation.d.ts +0 -7
  190. package/dist/dashboard/hooks/useAnimation.js +0 -24
  191. package/dist/dashboard/hooks/useAnimation.js.map +0 -1
  192. package/dist/dashboard/hooks/useKeyboard.d.ts +0 -8
  193. package/dist/dashboard/hooks/useKeyboard.js +0 -18
  194. package/dist/dashboard/hooks/useKeyboard.js.map +0 -1
  195. package/dist/dashboard/hooks/useTerminalSize.d.ts +0 -8
  196. package/dist/dashboard/hooks/useTerminalSize.js +0 -23
  197. package/dist/dashboard/hooks/useTerminalSize.js.map +0 -1
  198. package/dist/dashboard/index.d.ts +0 -6
  199. package/dist/dashboard/index.js +0 -36
  200. package/dist/dashboard/index.js.map +0 -1
  201. package/dist/dashboard/lib/diff-utils.d.ts +0 -21
  202. package/dist/dashboard/lib/diff-utils.js +0 -271
  203. package/dist/dashboard/lib/diff-utils.js.map +0 -1
  204. package/dist/dashboard/lib/logo-frames.d.ts +0 -20
  205. package/dist/dashboard/lib/logo-frames.js +0 -109
  206. package/dist/dashboard/lib/logo-frames.js.map +0 -1
  207. package/dist/dashboard/lib/welcome-art.d.ts +0 -1
  208. package/dist/dashboard/lib/welcome-art.js +0 -5
  209. package/dist/dashboard/lib/welcome-art.js.map +0 -1
  210. package/dist/dashboard/types.d.ts +0 -5
  211. package/dist/dashboard/types.js +0 -2
  212. package/dist/dashboard/types.js.map +0 -1
  213. package/dist/doctor/agent-prompt.d.ts +0 -10
  214. package/dist/doctor/agent-prompt.js +0 -190
  215. package/dist/doctor/agent-prompt.js.map +0 -1
  216. package/dist/doctor/checks/ai-analysis.d.ts +0 -9
  217. package/dist/doctor/checks/ai-analysis.js +0 -124
  218. package/dist/doctor/checks/ai-analysis.js.map +0 -1
  219. package/dist/doctor/checks/auth-patterns.d.ts +0 -2
  220. package/dist/doctor/checks/auth-patterns.js +0 -569
  221. package/dist/doctor/checks/auth-patterns.js.map +0 -1
  222. package/dist/doctor/checks/connectivity.d.ts +0 -2
  223. package/dist/doctor/checks/connectivity.js +0 -35
  224. package/dist/doctor/checks/connectivity.js.map +0 -1
  225. package/dist/doctor/checks/dashboard.d.ts +0 -3
  226. package/dist/doctor/checks/dashboard.js +0 -123
  227. package/dist/doctor/checks/dashboard.js.map +0 -1
  228. package/dist/doctor/checks/environment.d.ts +0 -2
  229. package/dist/doctor/checks/environment.js +0 -86
  230. package/dist/doctor/checks/environment.js.map +0 -1
  231. package/dist/doctor/checks/framework.d.ts +0 -2
  232. package/dist/doctor/checks/framework.js +0 -94
  233. package/dist/doctor/checks/framework.js.map +0 -1
  234. package/dist/doctor/checks/host-execution.d.ts +0 -2
  235. package/dist/doctor/checks/host-execution.js +0 -21
  236. package/dist/doctor/checks/host-execution.js.map +0 -1
  237. package/dist/doctor/checks/language.d.ts +0 -6
  238. package/dist/doctor/checks/language.js +0 -104
  239. package/dist/doctor/checks/language.js.map +0 -1
  240. package/dist/doctor/checks/mcp.d.ts +0 -15
  241. package/dist/doctor/checks/mcp.js +0 -34
  242. package/dist/doctor/checks/mcp.js.map +0 -1
  243. package/dist/doctor/checks/runtime.d.ts +0 -2
  244. package/dist/doctor/checks/runtime.js +0 -20
  245. package/dist/doctor/checks/runtime.js.map +0 -1
  246. package/dist/doctor/checks/sdk.d.ts +0 -2
  247. package/dist/doctor/checks/sdk.js +0 -192
  248. package/dist/doctor/checks/sdk.js.map +0 -1
  249. package/dist/doctor/checks/skills.d.ts +0 -9
  250. package/dist/doctor/checks/skills.js +0 -84
  251. package/dist/doctor/checks/skills.js.map +0 -1
  252. package/dist/doctor/clipboard.d.ts +0 -1
  253. package/dist/doctor/clipboard.js +0 -43
  254. package/dist/doctor/clipboard.js.map +0 -1
  255. package/dist/doctor/index.d.ts +0 -26
  256. package/dist/doctor/index.js +0 -182
  257. package/dist/doctor/index.js.map +0 -1
  258. package/dist/doctor/issues.d.ts +0 -63
  259. package/dist/doctor/issues.js +0 -199
  260. package/dist/doctor/issues.js.map +0 -1
  261. package/dist/doctor/json-output.d.ts +0 -2
  262. package/dist/doctor/json-output.js +0 -4
  263. package/dist/doctor/json-output.js.map +0 -1
  264. package/dist/doctor/output.d.ts +0 -7
  265. package/dist/doctor/output.js +0 -289
  266. package/dist/doctor/output.js.map +0 -1
  267. package/dist/doctor/types.d.ts +0 -203
  268. package/dist/doctor/types.js +0 -2
  269. package/dist/doctor/types.js.map +0 -1
  270. package/dist/integrations/dotnet/index.d.ts +0 -8
  271. package/dist/integrations/dotnet/index.js +0 -170
  272. package/dist/integrations/dotnet/index.js.map +0 -1
  273. package/dist/integrations/elixir/index.d.ts +0 -8
  274. package/dist/integrations/elixir/index.js +0 -146
  275. package/dist/integrations/elixir/index.js.map +0 -1
  276. package/dist/integrations/go/index.d.ts +0 -11
  277. package/dist/integrations/go/index.js +0 -212
  278. package/dist/integrations/go/index.js.map +0 -1
  279. package/dist/integrations/kotlin/index.d.ts +0 -4
  280. package/dist/integrations/kotlin/index.js +0 -78
  281. package/dist/integrations/kotlin/index.js.map +0 -1
  282. package/dist/integrations/nextjs/index.d.ts +0 -4
  283. package/dist/integrations/nextjs/index.js +0 -93
  284. package/dist/integrations/nextjs/index.js.map +0 -1
  285. package/dist/integrations/nextjs/utils.d.ts +0 -8
  286. package/dist/integrations/nextjs/utils.js +0 -68
  287. package/dist/integrations/nextjs/utils.js.map +0 -1
  288. package/dist/integrations/node/index.d.ts +0 -4
  289. package/dist/integrations/node/index.js +0 -52
  290. package/dist/integrations/node/index.js.map +0 -1
  291. package/dist/integrations/php/index.d.ts +0 -4
  292. package/dist/integrations/php/index.js +0 -51
  293. package/dist/integrations/php/index.js.map +0 -1
  294. package/dist/integrations/php-laravel/index.d.ts +0 -4
  295. package/dist/integrations/php-laravel/index.js +0 -51
  296. package/dist/integrations/php-laravel/index.js.map +0 -1
  297. package/dist/integrations/python/index.d.ts +0 -9
  298. package/dist/integrations/python/index.js +0 -249
  299. package/dist/integrations/python/index.js.map +0 -1
  300. package/dist/integrations/react/index.d.ts +0 -4
  301. package/dist/integrations/react/index.js +0 -49
  302. package/dist/integrations/react/index.js.map +0 -1
  303. package/dist/integrations/react-router/index.d.ts +0 -4
  304. package/dist/integrations/react-router/index.js +0 -94
  305. package/dist/integrations/react-router/index.js.map +0 -1
  306. package/dist/integrations/react-router/utils.d.ts +0 -10
  307. package/dist/integrations/react-router/utils.js +0 -162
  308. package/dist/integrations/react-router/utils.js.map +0 -1
  309. package/dist/integrations/ruby/index.d.ts +0 -8
  310. package/dist/integrations/ruby/index.js +0 -137
  311. package/dist/integrations/ruby/index.js.map +0 -1
  312. package/dist/integrations/sveltekit/index.d.ts +0 -4
  313. package/dist/integrations/sveltekit/index.js +0 -50
  314. package/dist/integrations/sveltekit/index.js.map +0 -1
  315. package/dist/integrations/tanstack-start/index.d.ts +0 -4
  316. package/dist/integrations/tanstack-start/index.js +0 -51
  317. package/dist/integrations/tanstack-start/index.js.map +0 -1
  318. package/dist/integrations/vanilla-js/index.d.ts +0 -4
  319. package/dist/integrations/vanilla-js/index.js +0 -49
  320. package/dist/integrations/vanilla-js/index.js.map +0 -1
  321. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.d.ts +0 -7
  322. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js +0 -12
  323. package/dist/lib/__test-helpers__/mock-unclaimed-env-api-error.js.map +0 -1
  324. package/dist/lib/adapters/cli-adapter.d.ts +0 -113
  325. package/dist/lib/adapters/cli-adapter.js +0 -641
  326. package/dist/lib/adapters/cli-adapter.js.map +0 -1
  327. package/dist/lib/adapters/dashboard-adapter.d.ts +0 -34
  328. package/dist/lib/adapters/dashboard-adapter.js +0 -121
  329. package/dist/lib/adapters/dashboard-adapter.js.map +0 -1
  330. package/dist/lib/adapters/headless-adapter.d.ts +0 -80
  331. package/dist/lib/adapters/headless-adapter.js +0 -347
  332. package/dist/lib/adapters/headless-adapter.js.map +0 -1
  333. package/dist/lib/adapters/index.d.ts +0 -4
  334. package/dist/lib/adapters/index.js +0 -4
  335. package/dist/lib/adapters/index.js.map +0 -1
  336. package/dist/lib/adapters/types.d.ts +0 -41
  337. package/dist/lib/adapters/types.js +0 -2
  338. package/dist/lib/adapters/types.js.map +0 -1
  339. package/dist/lib/agent-interface.d.ts +0 -84
  340. package/dist/lib/agent-interface.js +0 -840
  341. package/dist/lib/agent-interface.js.map +0 -1
  342. package/dist/lib/agent-runner.d.ts +0 -9
  343. package/dist/lib/agent-runner.js +0 -261
  344. package/dist/lib/agent-runner.js.map +0 -1
  345. package/dist/lib/ai-content.d.ts +0 -14
  346. package/dist/lib/ai-content.js +0 -131
  347. package/dist/lib/ai-content.js.map +0 -1
  348. package/dist/lib/api-error-handler.d.ts +0 -18
  349. package/dist/lib/api-error-handler.js +0 -76
  350. package/dist/lib/api-error-handler.js.map +0 -1
  351. package/dist/lib/api-key.d.ts +0 -14
  352. package/dist/lib/api-key.js +0 -37
  353. package/dist/lib/api-key.js.map +0 -1
  354. package/dist/lib/api.d.ts +0 -25
  355. package/dist/lib/api.js +0 -120
  356. package/dist/lib/api.js.map +0 -1
  357. package/dist/lib/background-refresh.d.ts +0 -29
  358. package/dist/lib/background-refresh.js +0 -95
  359. package/dist/lib/background-refresh.js.map +0 -1
  360. package/dist/lib/command-aliases.d.ts +0 -8
  361. package/dist/lib/command-aliases.js +0 -12
  362. package/dist/lib/command-aliases.js.map +0 -1
  363. package/dist/lib/completion-data.d.ts +0 -33
  364. package/dist/lib/completion-data.js +0 -33
  365. package/dist/lib/completion-data.js.map +0 -1
  366. package/dist/lib/config-store.d.ts +0 -63
  367. package/dist/lib/config-store.js +0 -293
  368. package/dist/lib/config-store.js.map +0 -1
  369. package/dist/lib/config.d.ts +0 -34
  370. package/dist/lib/config.js +0 -37
  371. package/dist/lib/config.js.map +0 -1
  372. package/dist/lib/constants.d.ts +0 -51
  373. package/dist/lib/constants.js +0 -50
  374. package/dist/lib/constants.js.map +0 -1
  375. package/dist/lib/credential-discovery.d.ts +0 -42
  376. package/dist/lib/credential-discovery.js +0 -100
  377. package/dist/lib/credential-discovery.js.map +0 -1
  378. package/dist/lib/credential-proxy.d.ts +0 -45
  379. package/dist/lib/credential-proxy.js +0 -364
  380. package/dist/lib/credential-proxy.js.map +0 -1
  381. package/dist/lib/credential-store.d.ts +0 -32
  382. package/dist/lib/credential-store.js +0 -236
  383. package/dist/lib/credential-store.js.map +0 -1
  384. package/dist/lib/credentials.d.ts +0 -13
  385. package/dist/lib/credentials.js +0 -34
  386. package/dist/lib/credentials.js.map +0 -1
  387. package/dist/lib/dev-command.d.ts +0 -26
  388. package/dist/lib/dev-command.js +0 -129
  389. package/dist/lib/dev-command.js.map +0 -1
  390. package/dist/lib/device-auth.d.ts +0 -48
  391. package/dist/lib/device-auth.js +0 -176
  392. package/dist/lib/device-auth.js.map +0 -1
  393. package/dist/lib/device-id.d.ts +0 -25
  394. package/dist/lib/device-id.js +0 -102
  395. package/dist/lib/device-id.js.map +0 -1
  396. package/dist/lib/ensure-auth.d.ts +0 -12
  397. package/dist/lib/ensure-auth.js +0 -111
  398. package/dist/lib/ensure-auth.js.map +0 -1
  399. package/dist/lib/env-writer.d.ts +0 -25
  400. package/dist/lib/env-writer.js +0 -90
  401. package/dist/lib/env-writer.js.map +0 -1
  402. package/dist/lib/events.d.ts +0 -248
  403. package/dist/lib/events.js +0 -19
  404. package/dist/lib/events.js.map +0 -1
  405. package/dist/lib/framework-config.d.ts +0 -133
  406. package/dist/lib/framework-config.js +0 -11
  407. package/dist/lib/framework-config.js.map +0 -1
  408. package/dist/lib/helper-functions.d.ts +0 -1
  409. package/dist/lib/helper-functions.js +0 -2
  410. package/dist/lib/helper-functions.js.map +0 -1
  411. package/dist/lib/host-probe.d.ts +0 -28
  412. package/dist/lib/host-probe.js +0 -154
  413. package/dist/lib/host-probe.js.map +0 -1
  414. package/dist/lib/installer-core.d.ts +0 -569
  415. package/dist/lib/installer-core.js +0 -1134
  416. package/dist/lib/installer-core.js.map +0 -1
  417. package/dist/lib/installer-core.types.d.ts +0 -162
  418. package/dist/lib/installer-core.types.js +0 -2
  419. package/dist/lib/installer-core.types.js.map +0 -1
  420. package/dist/lib/mcp-clients.d.ts +0 -45
  421. package/dist/lib/mcp-clients.js +0 -297
  422. package/dist/lib/mcp-clients.js.map +0 -1
  423. package/dist/lib/port-detection.d.ts +0 -7
  424. package/dist/lib/port-detection.js +0 -244
  425. package/dist/lib/port-detection.js.map +0 -1
  426. package/dist/lib/post-install.d.ts +0 -8
  427. package/dist/lib/post-install.js +0 -51
  428. package/dist/lib/post-install.js.map +0 -1
  429. package/dist/lib/preferences.d.ts +0 -143
  430. package/dist/lib/preferences.js +0 -227
  431. package/dist/lib/preferences.js.map +0 -1
  432. package/dist/lib/progress-tracker.d.ts +0 -22
  433. package/dist/lib/progress-tracker.js +0 -47
  434. package/dist/lib/progress-tracker.js.map +0 -1
  435. package/dist/lib/registry.d.ts +0 -42
  436. package/dist/lib/registry.js +0 -96
  437. package/dist/lib/registry.js.map +0 -1
  438. package/dist/lib/resolve-install-credentials.d.ts +0 -11
  439. package/dist/lib/resolve-install-credentials.js +0 -53
  440. package/dist/lib/resolve-install-credentials.js.map +0 -1
  441. package/dist/lib/run-with-core.d.ts +0 -7
  442. package/dist/lib/run-with-core.js +0 -559
  443. package/dist/lib/run-with-core.js.map +0 -1
  444. package/dist/lib/safe-tools.d.ts +0 -2
  445. package/dist/lib/safe-tools.js +0 -212
  446. package/dist/lib/safe-tools.js.map +0 -1
  447. package/dist/lib/scaffold/index.d.ts +0 -1
  448. package/dist/lib/scaffold/index.js +0 -2
  449. package/dist/lib/scaffold/index.js.map +0 -1
  450. package/dist/lib/scaffold/scaffold.d.ts +0 -66
  451. package/dist/lib/scaffold/scaffold.js +0 -156
  452. package/dist/lib/scaffold/scaffold.js.map +0 -1
  453. package/dist/lib/settings.d.ts +0 -60
  454. package/dist/lib/settings.js +0 -31
  455. package/dist/lib/settings.js.map +0 -1
  456. package/dist/lib/staging-api.d.ts +0 -22
  457. package/dist/lib/staging-api.js +0 -74
  458. package/dist/lib/staging-api.js.map +0 -1
  459. package/dist/lib/startup-notice-gate.d.ts +0 -21
  460. package/dist/lib/startup-notice-gate.js +0 -29
  461. package/dist/lib/startup-notice-gate.js.map +0 -1
  462. package/dist/lib/telemetry-notice.d.ts +0 -25
  463. package/dist/lib/telemetry-notice.js +0 -58
  464. package/dist/lib/telemetry-notice.js.map +0 -1
  465. package/dist/lib/token-refresh-client.d.ts +0 -23
  466. package/dist/lib/token-refresh-client.js +0 -89
  467. package/dist/lib/token-refresh-client.js.map +0 -1
  468. package/dist/lib/token-refresh.d.ts +0 -12
  469. package/dist/lib/token-refresh.js +0 -27
  470. package/dist/lib/token-refresh.js.map +0 -1
  471. package/dist/lib/unclaimed-env-api.d.ts +0 -42
  472. package/dist/lib/unclaimed-env-api.js +0 -139
  473. package/dist/lib/unclaimed-env-api.js.map +0 -1
  474. package/dist/lib/unclaimed-env-provision.d.ts +0 -24
  475. package/dist/lib/unclaimed-env-provision.js +0 -80
  476. package/dist/lib/unclaimed-env-provision.js.map +0 -1
  477. package/dist/lib/unclaimed-warning.d.ts +0 -15
  478. package/dist/lib/unclaimed-warning.js +0 -78
  479. package/dist/lib/unclaimed-warning.js.map +0 -1
  480. package/dist/lib/validation/build-validator.d.ts +0 -21
  481. package/dist/lib/validation/build-validator.js +0 -153
  482. package/dist/lib/validation/build-validator.js.map +0 -1
  483. package/dist/lib/validation/index.d.ts +0 -4
  484. package/dist/lib/validation/index.js +0 -4
  485. package/dist/lib/validation/index.js.map +0 -1
  486. package/dist/lib/validation/quick-checks.d.ts +0 -19
  487. package/dist/lib/validation/quick-checks.js +0 -192
  488. package/dist/lib/validation/quick-checks.js.map +0 -1
  489. package/dist/lib/validation/security-checks.d.ts +0 -35
  490. package/dist/lib/validation/security-checks.js +0 -106
  491. package/dist/lib/validation/security-checks.js.map +0 -1
  492. package/dist/lib/validation/types.d.ts +0 -56
  493. package/dist/lib/validation/types.js +0 -2
  494. package/dist/lib/validation/types.js.map +0 -1
  495. package/dist/lib/validation/validator.d.ts +0 -13
  496. package/dist/lib/validation/validator.js +0 -711
  497. package/dist/lib/validation/validator.js.map +0 -1
  498. package/dist/lib/version-check.d.ts +0 -6
  499. package/dist/lib/version-check.js +0 -46
  500. package/dist/lib/version-check.js.map +0 -1
  501. package/dist/lib/workos-api.d.ts +0 -30
  502. package/dist/lib/workos-api.js +0 -69
  503. package/dist/lib/workos-api.js.map +0 -1
  504. package/dist/lib/workos-client.d.ts +0 -58
  505. package/dist/lib/workos-client.js +0 -140
  506. package/dist/lib/workos-client.js.map +0 -1
  507. package/dist/lib/workos-management.d.ts +0 -32
  508. package/dist/lib/workos-management.js +0 -149
  509. package/dist/lib/workos-management.js.map +0 -1
  510. package/dist/nextjs/nextjs-installer-agent.d.ts +0 -5
  511. package/dist/nextjs/nextjs-installer-agent.js +0 -6
  512. package/dist/nextjs/nextjs-installer-agent.js.map +0 -1
  513. package/dist/nextjs/utils.d.ts +0 -4
  514. package/dist/nextjs/utils.js +0 -5
  515. package/dist/nextjs/utils.js.map +0 -1
  516. package/dist/react/react-installer-agent.d.ts +0 -4
  517. package/dist/react/react-installer-agent.js +0 -5
  518. package/dist/react/react-installer-agent.js.map +0 -1
  519. package/dist/react-router/react-router-installer-agent.d.ts +0 -4
  520. package/dist/react-router/react-router-installer-agent.js +0 -5
  521. package/dist/react-router/react-router-installer-agent.js.map +0 -1
  522. package/dist/react-router/utils.d.ts +0 -4
  523. package/dist/react-router/utils.js +0 -5
  524. package/dist/react-router/utils.js.map +0 -1
  525. package/dist/run.d.ts +0 -33
  526. package/dist/run.js +0 -58
  527. package/dist/run.js.map +0 -1
  528. package/dist/smoke-test.ts +0 -881
  529. package/dist/steps/add-or-update-environment-variables.d.ts +0 -10
  530. package/dist/steps/add-or-update-environment-variables.js +0 -155
  531. package/dist/steps/add-or-update-environment-variables.js.map +0 -1
  532. package/dist/steps/index.d.ts +0 -3
  533. package/dist/steps/index.js +0 -4
  534. package/dist/steps/index.js.map +0 -1
  535. package/dist/steps/run-prettier.d.ts +0 -5
  536. package/dist/steps/run-prettier.js +0 -50
  537. package/dist/steps/run-prettier.js.map +0 -1
  538. package/dist/steps/upload-environment-variables/EnvironmentProvider.d.ts +0 -8
  539. package/dist/steps/upload-environment-variables/EnvironmentProvider.js +0 -7
  540. package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
  541. package/dist/steps/upload-environment-variables/index.d.ts +0 -6
  542. package/dist/steps/upload-environment-variables/index.js +0 -69
  543. package/dist/steps/upload-environment-variables/index.js.map +0 -1
  544. package/dist/steps/upload-environment-variables/providers/vercel.d.ts +0 -14
  545. package/dist/steps/upload-environment-variables/providers/vercel.js +0 -107
  546. package/dist/steps/upload-environment-variables/providers/vercel.js.map +0 -1
  547. package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +0 -4
  548. package/dist/tanstack-start/tanstack-start-installer-agent.js +0 -5
  549. package/dist/tanstack-start/tanstack-start-installer-agent.js.map +0 -1
  550. package/dist/telemetry.d.ts +0 -2
  551. package/dist/telemetry.js +0 -29
  552. package/dist/telemetry.js.map +0 -1
  553. package/dist/test/force-insecure-storage.d.ts +0 -1
  554. package/dist/test/force-insecure-storage.js +0 -9
  555. package/dist/test/force-insecure-storage.js.map +0 -1
  556. package/dist/test/setup.d.ts +0 -1
  557. package/dist/test/setup.js +0 -38
  558. package/dist/test/setup.js.map +0 -1
  559. package/dist/utils/analytics.d.ts +0 -66
  560. package/dist/utils/analytics.js +0 -330
  561. package/dist/utils/analytics.js.map +0 -1
  562. package/dist/utils/bash.d.ts +0 -2
  563. package/dist/utils/bash.js +0 -17
  564. package/dist/utils/bash.js.map +0 -1
  565. package/dist/utils/box.d.ts +0 -9
  566. package/dist/utils/box.js +0 -15
  567. package/dist/utils/box.js.map +0 -1
  568. package/dist/utils/cli-exit.d.ts +0 -15
  569. package/dist/utils/cli-exit.js +0 -11
  570. package/dist/utils/cli-exit.js.map +0 -1
  571. package/dist/utils/cli-symbols.d.ts +0 -44
  572. package/dist/utils/cli-symbols.js +0 -58
  573. package/dist/utils/cli-symbols.js.map +0 -1
  574. package/dist/utils/command-invocation.d.ts +0 -10
  575. package/dist/utils/command-invocation.js +0 -26
  576. package/dist/utils/command-invocation.js.map +0 -1
  577. package/dist/utils/command-telemetry.d.ts +0 -17
  578. package/dist/utils/command-telemetry.js +0 -67
  579. package/dist/utils/command-telemetry.js.map +0 -1
  580. package/dist/utils/crash-reporter.d.ts +0 -13
  581. package/dist/utils/crash-reporter.js +0 -91
  582. package/dist/utils/crash-reporter.js.map +0 -1
  583. package/dist/utils/debug.d.ts +0 -9
  584. package/dist/utils/debug.js +0 -105
  585. package/dist/utils/debug.js.map +0 -1
  586. package/dist/utils/env-parser.d.ts +0 -5
  587. package/dist/utils/env-parser.js +0 -18
  588. package/dist/utils/env-parser.js.map +0 -1
  589. package/dist/utils/environment.d.ts +0 -10
  590. package/dist/utils/environment.js +0 -69
  591. package/dist/utils/environment.js.map +0 -1
  592. package/dist/utils/errors.d.ts +0 -3
  593. package/dist/utils/errors.js +0 -7
  594. package/dist/utils/errors.js.map +0 -1
  595. package/dist/utils/exec-file.d.ts +0 -15
  596. package/dist/utils/exec-file.js +0 -39
  597. package/dist/utils/exec-file.js.map +0 -1
  598. package/dist/utils/exit-codes.d.ts +0 -31
  599. package/dist/utils/exit-codes.js +0 -69
  600. package/dist/utils/exit-codes.js.map +0 -1
  601. package/dist/utils/git-utils.d.ts +0 -23
  602. package/dist/utils/git-utils.js +0 -86
  603. package/dist/utils/git-utils.js.map +0 -1
  604. package/dist/utils/help-json.d.ts +0 -58
  605. package/dist/utils/help-json.js +0 -1577
  606. package/dist/utils/help-json.js.map +0 -1
  607. package/dist/utils/interaction-mode.d.ts +0 -25
  608. package/dist/utils/interaction-mode.js +0 -99
  609. package/dist/utils/interaction-mode.js.map +0 -1
  610. package/dist/utils/lock-art.d.ts +0 -4
  611. package/dist/utils/lock-art.js +0 -73
  612. package/dist/utils/lock-art.js.map +0 -1
  613. package/dist/utils/logging.d.ts +0 -9
  614. package/dist/utils/logging.js +0 -36
  615. package/dist/utils/logging.js.map +0 -1
  616. package/dist/utils/ndjson.d.ts +0 -16
  617. package/dist/utils/ndjson.js +0 -18
  618. package/dist/utils/ndjson.js.map +0 -1
  619. package/dist/utils/output.d.ts +0 -60
  620. package/dist/utils/output.js +0 -124
  621. package/dist/utils/output.js.map +0 -1
  622. package/dist/utils/package-json.d.ts +0 -26
  623. package/dist/utils/package-json.js +0 -32
  624. package/dist/utils/package-json.js.map +0 -1
  625. package/dist/utils/package-manager.d.ts +0 -21
  626. package/dist/utils/package-manager.js +0 -166
  627. package/dist/utils/package-manager.js.map +0 -1
  628. package/dist/utils/paths.d.ts +0 -5
  629. package/dist/utils/paths.js +0 -18
  630. package/dist/utils/paths.js.map +0 -1
  631. package/dist/utils/platform.d.ts +0 -8
  632. package/dist/utils/platform.js +0 -7
  633. package/dist/utils/platform.js.map +0 -1
  634. package/dist/utils/recovery-hints.d.ts +0 -42
  635. package/dist/utils/recovery-hints.js +0 -92
  636. package/dist/utils/recovery-hints.js.map +0 -1
  637. package/dist/utils/redact.d.ts +0 -5
  638. package/dist/utils/redact.js +0 -29
  639. package/dist/utils/redact.js.map +0 -1
  640. package/dist/utils/register-subcommand.d.ts +0 -10
  641. package/dist/utils/register-subcommand.js +0 -33
  642. package/dist/utils/register-subcommand.js.map +0 -1
  643. package/dist/utils/semver.d.ts +0 -10
  644. package/dist/utils/semver.js +0 -43
  645. package/dist/utils/semver.js.map +0 -1
  646. package/dist/utils/string.d.ts +0 -1
  647. package/dist/utils/string.js +0 -6
  648. package/dist/utils/string.js.map +0 -1
  649. package/dist/utils/summary-box.d.ts +0 -25
  650. package/dist/utils/summary-box.js +0 -211
  651. package/dist/utils/summary-box.js.map +0 -1
  652. package/dist/utils/table.d.ts +0 -5
  653. package/dist/utils/table.js +0 -18
  654. package/dist/utils/table.js.map +0 -1
  655. package/dist/utils/telemetry-client.d.ts +0 -43
  656. package/dist/utils/telemetry-client.js +0 -171
  657. package/dist/utils/telemetry-client.js.map +0 -1
  658. package/dist/utils/telemetry-store-forward.d.ts +0 -11
  659. package/dist/utils/telemetry-store-forward.js +0 -94
  660. package/dist/utils/telemetry-store-forward.js.map +0 -1
  661. package/dist/utils/telemetry-types.d.ts +0 -100
  662. package/dist/utils/telemetry-types.js +0 -6
  663. package/dist/utils/telemetry-types.js.map +0 -1
  664. package/dist/utils/types.d.ts +0 -123
  665. package/dist/utils/types.js +0 -2
  666. package/dist/utils/types.js.map +0 -1
  667. package/dist/utils/ui-utils.d.ts +0 -97
  668. package/dist/utils/ui-utils.js +0 -449
  669. package/dist/utils/ui-utils.js.map +0 -1
  670. package/dist/utils/ui.d.ts +0 -148
  671. package/dist/utils/ui.js +0 -368
  672. package/dist/utils/ui.js.map +0 -1
  673. package/dist/utils/urls.d.ts +0 -13
  674. package/dist/utils/urls.js +0 -14
  675. package/dist/utils/urls.js.map +0 -1
  676. package/dist/utils/vendor/is-unicorn-supported.d.ts +0 -1
  677. package/dist/utils/vendor/is-unicorn-supported.js +0 -21
  678. package/dist/utils/vendor/is-unicorn-supported.js.map +0 -1
  679. package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +0 -4
  680. package/dist/vanilla-js/vanilla-js-installer-agent.js +0 -5
  681. package/dist/vanilla-js/vanilla-js-installer-agent.js.map +0 -1
@@ -1,881 +0,0 @@
1
- /**
2
- * Smoke test for CLI management commands.
3
- *
4
- * Exercises each command handler directly against the real WorkOS API
5
- * to verify SDK method signatures are correct.
6
- *
7
- * Usage:
8
- * WORKOS_API_KEY=sk_test_xxx pnpm tsx scripts/smoke-test.ts
9
- */
10
-
11
- import { writeFileSync, unlinkSync, existsSync } from 'node:fs';
12
- import { setOutputMode } from '../src/utils/output.js';
13
- import { createWorkOSClient } from '../src/lib/workos-client.js';
14
-
15
- setOutputMode('json');
16
-
17
- // Intercept process.exit so handler errors (exitWithError) don't kill the smoke test
18
- const realExit = process.exit;
19
- let lastExitCode: number | undefined;
20
- process.exit = ((code?: number) => {
21
- lastExitCode = code ?? 0;
22
- throw new Error(`process.exit(${code}) intercepted`);
23
- }) as never;
24
-
25
- const apiKey = process.env.WORKOS_API_KEY;
26
- if (!apiKey) {
27
- realExit.call(process, 1);
28
- }
29
-
30
- interface TestResult {
31
- name: string;
32
- status: 'pass' | 'fail' | 'skip';
33
- error?: string;
34
- duration?: number;
35
- }
36
-
37
- const results: TestResult[] = [];
38
-
39
- // Captured output from handlers (we parse this to extract IDs)
40
- let capturedOutput: string[] = [];
41
-
42
- async function test(name: string, fn: () => Promise<void>): Promise<void> {
43
- const start = Date.now();
44
- capturedOutput = [];
45
- lastExitCode = undefined;
46
- try {
47
- await fn();
48
- results.push({ name, status: 'pass', duration: Date.now() - start });
49
- process.stdout.write(` ✓ ${name} (${Date.now() - start}ms)\n`);
50
- } catch (error: unknown) {
51
- const msg = error instanceof Error ? error.message : String(error);
52
- const stack = error instanceof Error ? error.stack : undefined;
53
-
54
- // Auth errors = signature is correct, key just lacks access
55
- if (msg.includes('401') || msg.includes('403') || msg.includes('Unauthorized') || msg.includes('Forbidden')) {
56
- results.push({ name, status: 'pass', duration: Date.now() - start });
57
- process.stdout.write(` ✓ ${name} (auth-limited, signature OK) (${Date.now() - start}ms)\n`);
58
- return;
59
- }
60
-
61
- // Export timeout = signature is correct, just slow
62
- if (msg.includes('Export timed out')) {
63
- results.push({ name, status: 'pass', duration: Date.now() - start });
64
- process.stdout.write(` ✓ ${name} (timed out, signature OK) (${Date.now() - start}ms)\n`);
65
- return;
66
- }
67
-
68
- // Structured API errors (400, 404, 422) = call reached the API, signature is correct,
69
- // business logic rejected it (missing config, entity not found, validation, etc.)
70
- if (
71
- msg.includes('process.exit') &&
72
- capturedOutput.some((o) => {
73
- try {
74
- const p = JSON.parse(o.replace('[stderr] ', ''));
75
- return p?.error?.code;
76
- } catch {
77
- return false;
78
- }
79
- })
80
- ) {
81
- results.push({ name, status: 'pass', duration: Date.now() - start });
82
- const apiErr = capturedOutput.find((o) => o.includes('"error"'));
83
- const code = apiErr ? JSON.parse(apiErr.replace('[stderr] ', '')).error?.code : 'unknown';
84
- process.stdout.write(` ✓ ${name} (api-rejected: ${code}, signature OK) (${Date.now() - start}ms)\n`);
85
- return;
86
- }
87
-
88
- // Build detailed error message
89
- const details: string[] = [` ✗ ${name}: ${msg}`];
90
- if (lastExitCode !== undefined) {
91
- details.push(` exit code: ${lastExitCode}`);
92
- }
93
- if (capturedOutput.length > 0) {
94
- details.push(` handler output: ${capturedOutput.join(' | ')}`);
95
- }
96
- if (stack && !msg.includes('process.exit')) {
97
- // Show a couple frames for real errors (not the exit intercept)
98
- const frames = stack
99
- .split('\n')
100
- .slice(1, 4)
101
- .map((l) => ` ${l.trim()}`);
102
- details.push(...frames);
103
- }
104
-
105
- const fullError = details.join('\n');
106
- results.push({ name, status: 'fail', error: fullError, duration: Date.now() - start });
107
- process.stdout.write(fullError + '\n');
108
- }
109
- }
110
-
111
- /** Parse the first captured JSON output line */
112
- function parseOutput(): unknown {
113
- for (const line of capturedOutput) {
114
- try {
115
- return JSON.parse(line);
116
- } catch {
117
- continue;
118
- }
119
- }
120
- return null;
121
- }
122
-
123
- // Suppress console.log/error from handlers, capture output
124
- const origLog = console.log;
125
- const origError = console.error;
126
- function muteConsole() {
127
- console.log = (...args: unknown[]) => {
128
- capturedOutput.push(args.map(String).join(' '));
129
- };
130
- console.error = (...args: unknown[]) => {
131
- capturedOutput.push('[stderr] ' + args.map(String).join(' '));
132
- };
133
- }
134
- function unmuteConsole() {
135
- console.log = origLog;
136
- console.error = origError;
137
- }
138
-
139
- // Cleanup registry — functions to call at the end
140
- const cleanups: Array<() => Promise<void>> = [];
141
-
142
- function section(name: string) {
143
- unmuteConsole();
144
- process.stdout.write(`\n${name}:\n`);
145
- muteConsole();
146
- }
147
-
148
- async function run() {
149
- process.stdout.write('\n🔍 WorkOS CLI Smoke Test\n');
150
- process.stdout.write(` API Key: ${apiKey!.substring(0, 12)}...\n\n`);
151
-
152
- const client = createWorkOSClient(apiKey);
153
-
154
- // ---- Setup: create test org for commands that need an org ID ----
155
- process.stdout.write('Setup:\n');
156
- const testOrgName = `smoke-test-${Date.now()}`;
157
- let testOrgId: string | undefined;
158
- let testUserId: string | undefined;
159
-
160
- try {
161
- const org = await client.sdk.organizations.createOrganization({ name: testOrgName });
162
- testOrgId = org.id;
163
- process.stdout.write(` Created test org: ${testOrgId}\n`);
164
- cleanups.push(async () => {
165
- await client.sdk.organizations.deleteOrganization(testOrgId!);
166
- process.stdout.write(` Cleaned up org: ${testOrgId}\n`);
167
- });
168
- } catch (e) {
169
- process.stdout.write(` ⚠ Could not create test org: ${e instanceof Error ? e.message : e}\n`);
170
- }
171
-
172
- // Get a user ID from existing users
173
- try {
174
- const users = await client.sdk.userManagement.listUsers({ limit: 1 });
175
- if (users.data.length > 0) {
176
- testUserId = users.data[0].id;
177
- process.stdout.write(` Found test user: ${testUserId}\n`);
178
- }
179
- } catch {
180
- process.stdout.write(` ⚠ Could not list users for test user ID\n`);
181
- }
182
-
183
- process.stdout.write('\n');
184
-
185
- // =====================================================================
186
- // Organization (lifecycle)
187
- // =====================================================================
188
- section('Organization');
189
- await test('organization list', async () => {
190
- const { runOrgList } = await import('../src/commands/organization.js');
191
- await runOrgList({}, apiKey!);
192
- });
193
-
194
- const orgLifecycleName = `smoke-org-lifecycle-${Date.now()}`;
195
- let lifecycleOrgId: string | undefined;
196
- await test('organization create', async () => {
197
- const { runOrgCreate } = await import('../src/commands/organization.js');
198
- await runOrgCreate(orgLifecycleName, [], apiKey!);
199
- const output = parseOutput() as { data?: { id?: string } } | null;
200
- lifecycleOrgId = output?.data?.id;
201
- });
202
- if (lifecycleOrgId) {
203
- await test('organization get', async () => {
204
- const { runOrgGet } = await import('../src/commands/organization.js');
205
- await runOrgGet(lifecycleOrgId!, apiKey!);
206
- });
207
- await test('organization update', async () => {
208
- const { runOrgUpdate } = await import('../src/commands/organization.js');
209
- await runOrgUpdate(lifecycleOrgId!, `${orgLifecycleName}-updated`, apiKey!);
210
- });
211
- await test('organization delete', async () => {
212
- const { runOrgDelete } = await import('../src/commands/organization.js');
213
- await runOrgDelete(lifecycleOrgId!, apiKey!);
214
- });
215
- }
216
-
217
- // =====================================================================
218
- // User (read + update — no create/delete for safety)
219
- // =====================================================================
220
- section('User');
221
- await test('user list', async () => {
222
- const { runUserList } = await import('../src/commands/user.js');
223
- await runUserList({}, apiKey!);
224
- });
225
- if (testUserId) {
226
- await test('user get', async () => {
227
- const { runUserGet } = await import('../src/commands/user.js');
228
- await runUserGet(testUserId!, apiKey!);
229
- });
230
- await test('user update', async () => {
231
- const { runUserUpdate } = await import('../src/commands/user.js');
232
- await runUserUpdate(testUserId!, apiKey!, {});
233
- });
234
- }
235
-
236
- // =====================================================================
237
- // Permission (full CRUD lifecycle)
238
- // =====================================================================
239
- section('Permission (lifecycle)');
240
-
241
- const testPermSlug = `smoke-perm-${Date.now()}`;
242
- const testPermSlug2 = `smoke-perm2-${Date.now()}`;
243
- await test('permission create', async () => {
244
- const { runPermissionCreate } = await import('../src/commands/permission.js');
245
- await runPermissionCreate({ slug: testPermSlug, name: `Smoke Test ${testPermSlug}` }, apiKey!);
246
- });
247
- await test('permission create (second)', async () => {
248
- const { runPermissionCreate } = await import('../src/commands/permission.js');
249
- await runPermissionCreate({ slug: testPermSlug2, name: `Smoke Test ${testPermSlug2}` }, apiKey!);
250
- });
251
- await test('permission list', async () => {
252
- const { runPermissionList } = await import('../src/commands/permission.js');
253
- await runPermissionList({}, apiKey!);
254
- });
255
- await test('permission get', async () => {
256
- const { runPermissionGet } = await import('../src/commands/permission.js');
257
- await runPermissionGet(testPermSlug, apiKey!);
258
- });
259
- await test('permission update', async () => {
260
- const { runPermissionUpdate } = await import('../src/commands/permission.js');
261
- await runPermissionUpdate(testPermSlug, { name: `Updated ${testPermSlug}` }, apiKey!);
262
- });
263
- // Cleanup permissions after role tests use them
264
- cleanups.push(async () => {
265
- try {
266
- const { runPermissionDelete } = await import('../src/commands/permission.js');
267
- muteConsole();
268
- await runPermissionDelete(testPermSlug, apiKey!);
269
- await runPermissionDelete(testPermSlug2, apiKey!);
270
- unmuteConsole();
271
- process.stdout.write(` Cleaned up permissions: ${testPermSlug}, ${testPermSlug2}\n`);
272
- } catch {}
273
- });
274
-
275
- // =====================================================================
276
- // Role (full CRUD lifecycle + permission ops, org-scoped)
277
- // =====================================================================
278
- section('Role (lifecycle)');
279
- await test('role list (env)', async () => {
280
- const { runRoleList } = await import('../src/commands/role.js');
281
- await runRoleList(undefined, apiKey!);
282
- });
283
- if (testOrgId) {
284
- await test('role list (org)', async () => {
285
- const { runRoleList } = await import('../src/commands/role.js');
286
- await runRoleList(testOrgId, apiKey!);
287
- });
288
-
289
- const testRoleSlug = `org-smoke-role-${Date.now()}`;
290
- await test('role create (org)', async () => {
291
- const { runRoleCreate } = await import('../src/commands/role.js');
292
- await runRoleCreate({ slug: testRoleSlug, name: `Smoke Role ${testRoleSlug}` }, testOrgId, apiKey!);
293
- });
294
- await test('role get (org)', async () => {
295
- const { runRoleGet } = await import('../src/commands/role.js');
296
- await runRoleGet(testRoleSlug, testOrgId, apiKey!);
297
- });
298
- await test('role update (org)', async () => {
299
- const { runRoleUpdate } = await import('../src/commands/role.js');
300
- await runRoleUpdate(testRoleSlug, { name: `Updated ${testRoleSlug}` }, testOrgId, apiKey!);
301
- });
302
- await test('role set-permissions', async () => {
303
- const { runRoleSetPermissions } = await import('../src/commands/role.js');
304
- await runRoleSetPermissions(testRoleSlug, [testPermSlug], testOrgId, apiKey!);
305
- });
306
- await test('role add-permission', async () => {
307
- const { runRoleAddPermission } = await import('../src/commands/role.js');
308
- await runRoleAddPermission(testRoleSlug, testPermSlug2, testOrgId, apiKey!);
309
- });
310
- await test('role remove-permission', async () => {
311
- const { runRoleRemovePermission } = await import('../src/commands/role.js');
312
- await runRoleRemovePermission(testRoleSlug, testPermSlug2, testOrgId!, apiKey!);
313
- });
314
- await test('role delete (org)', async () => {
315
- const { runRoleDelete } = await import('../src/commands/role.js');
316
- await runRoleDelete(testRoleSlug, testOrgId!, apiKey!);
317
- });
318
- }
319
-
320
- // =====================================================================
321
- // Membership (full lifecycle — needs org + user)
322
- // =====================================================================
323
- section('Membership (lifecycle)');
324
- if (testOrgId) {
325
- await test('membership list (by org)', async () => {
326
- const { runMembershipList } = await import('../src/commands/membership.js');
327
- await runMembershipList({ org: testOrgId }, apiKey!);
328
- });
329
- }
330
- if (testUserId) {
331
- await test('membership list (by user)', async () => {
332
- const { runMembershipList } = await import('../src/commands/membership.js');
333
- await runMembershipList({ user: testUserId }, apiKey!);
334
- });
335
- }
336
- if (testOrgId && testUserId) {
337
- let membershipId: string | undefined;
338
- await test('membership create', async () => {
339
- const { runMembershipCreate } = await import('../src/commands/membership.js');
340
- await runMembershipCreate({ org: testOrgId!, user: testUserId! }, apiKey!);
341
- const output = parseOutput() as { data?: { id?: string } } | null;
342
- membershipId = output?.data?.id;
343
- });
344
- if (membershipId) {
345
- await test('membership get', async () => {
346
- const { runMembershipGet } = await import('../src/commands/membership.js');
347
- await runMembershipGet(membershipId!, apiKey!);
348
- });
349
- await test('membership update', async () => {
350
- const { runMembershipUpdate } = await import('../src/commands/membership.js');
351
- await runMembershipUpdate(membershipId!, undefined, apiKey!);
352
- });
353
- await test('membership deactivate', async () => {
354
- const { runMembershipDeactivate } = await import('../src/commands/membership.js');
355
- await runMembershipDeactivate(membershipId!, apiKey!);
356
- });
357
- await test('membership reactivate', async () => {
358
- const { runMembershipReactivate } = await import('../src/commands/membership.js');
359
- await runMembershipReactivate(membershipId!, apiKey!);
360
- });
361
- await test('membership delete', async () => {
362
- const { runMembershipDelete } = await import('../src/commands/membership.js');
363
- await runMembershipDelete(membershipId!, apiKey!);
364
- });
365
- }
366
- }
367
-
368
- // =====================================================================
369
- // Invitation (full lifecycle)
370
- // =====================================================================
371
- section('Invitation (lifecycle)');
372
- await test('invitation list', async () => {
373
- const { runInvitationList } = await import('../src/commands/invitation.js');
374
- await runInvitationList({}, apiKey!);
375
- });
376
- if (testOrgId) {
377
- let invId: string | undefined;
378
- const invEmail = `smoke-inv-${Date.now()}@example.com`;
379
- await test('invitation send', async () => {
380
- const { runInvitationSend } = await import('../src/commands/invitation.js');
381
- await runInvitationSend({ email: invEmail, org: testOrgId! }, apiKey!);
382
- const output = parseOutput() as { data?: { id?: string } } | null;
383
- invId = output?.data?.id;
384
- });
385
- if (invId) {
386
- await test('invitation get', async () => {
387
- const { runInvitationGet } = await import('../src/commands/invitation.js');
388
- await runInvitationGet(invId!, apiKey!);
389
- });
390
- await test('invitation resend', async () => {
391
- const { runInvitationResend } = await import('../src/commands/invitation.js');
392
- await runInvitationResend(invId!, apiKey!);
393
- });
394
- await test('invitation revoke', async () => {
395
- const { runInvitationRevoke } = await import('../src/commands/invitation.js');
396
- await runInvitationRevoke(invId!, apiKey!);
397
- });
398
- }
399
- }
400
-
401
- // =====================================================================
402
- // Session
403
- // =====================================================================
404
- section('Session');
405
- if (testUserId) {
406
- let sessionId: string | undefined;
407
- await test('session list', async () => {
408
- const { runSessionList } = await import('../src/commands/session.js');
409
- await runSessionList(testUserId!, {}, apiKey!);
410
- const output = parseOutput() as { data?: Array<{ id?: string }> } | null;
411
- sessionId = output?.data?.[0]?.id;
412
- });
413
- if (sessionId) {
414
- await test('session revoke', async () => {
415
- const { runSessionRevoke } = await import('../src/commands/session.js');
416
- await runSessionRevoke(sessionId!, apiKey!);
417
- });
418
- }
419
- }
420
-
421
- // =====================================================================
422
- // Connection (read-only — delete is too destructive)
423
- // =====================================================================
424
- section('Connection');
425
- await test('connection list', async () => {
426
- const { runConnectionList } = await import('../src/commands/connection.js');
427
- await runConnectionList({}, apiKey!);
428
- });
429
- try {
430
- const connections = await client.sdk.sso.listConnections({ limit: 1 });
431
- if (connections.data.length > 0) {
432
- const connId = connections.data[0].id;
433
- await test('connection get', async () => {
434
- const { runConnectionGet } = await import('../src/commands/connection.js');
435
- await runConnectionGet(connId, apiKey!);
436
- });
437
- }
438
- } catch {}
439
-
440
- // =====================================================================
441
- // Directory (read-only + list-users/list-groups — delete too destructive)
442
- // =====================================================================
443
- section('Directory');
444
- await test('directory list', async () => {
445
- const { runDirectoryList } = await import('../src/commands/directory.js');
446
- await runDirectoryList({}, apiKey!);
447
- });
448
- try {
449
- const directories = await client.sdk.directorySync.listDirectories({ limit: 1 });
450
- if (directories.data.length > 0) {
451
- const dirId = directories.data[0].id;
452
- await test('directory get', async () => {
453
- const { runDirectoryGet } = await import('../src/commands/directory.js');
454
- await runDirectoryGet(dirId, apiKey!);
455
- });
456
- await test('directory list-users', async () => {
457
- const { runDirectoryListUsers } = await import('../src/commands/directory.js');
458
- await runDirectoryListUsers({ directory: dirId }, apiKey!);
459
- });
460
- await test('directory list-groups', async () => {
461
- const { runDirectoryListGroups } = await import('../src/commands/directory.js');
462
- await runDirectoryListGroups({ directory: dirId }, apiKey!);
463
- });
464
- }
465
- } catch {}
466
-
467
- // =====================================================================
468
- // Event
469
- // =====================================================================
470
- section('Event');
471
- await test('event list', async () => {
472
- const { runEventList } = await import('../src/commands/event.js');
473
- await runEventList({ events: ['authentication.email_verification_succeeded'] }, apiKey!);
474
- });
475
-
476
- // =====================================================================
477
- // Audit Log
478
- // =====================================================================
479
- section('Audit Log');
480
- await test('audit-log list-actions', async () => {
481
- const { runAuditLogListActions } = await import('../src/commands/audit-log.js');
482
- await runAuditLogListActions(apiKey!);
483
- });
484
- if (testOrgId) {
485
- await test('audit-log create-event', async () => {
486
- const { runAuditLogCreateEvent } = await import('../src/commands/audit-log.js');
487
- await runAuditLogCreateEvent(
488
- testOrgId!,
489
- {
490
- action: 'smoke.test',
491
- actorType: 'user',
492
- actorId: 'smoke-test-actor',
493
- actorName: 'Smoke Test',
494
- },
495
- apiKey!,
496
- );
497
- });
498
- await test('audit-log export', async () => {
499
- const { runAuditLogExport } = await import('../src/commands/audit-log.js');
500
- const now = new Date();
501
- const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000);
502
- await runAuditLogExport(
503
- {
504
- organizationId: testOrgId!,
505
- rangeStart: yesterday.toISOString(),
506
- rangeEnd: now.toISOString(),
507
- },
508
- apiKey!,
509
- );
510
- });
511
- await test('audit-log get-retention', async () => {
512
- const { runAuditLogGetRetention } = await import('../src/commands/audit-log.js');
513
- await runAuditLogGetRetention(testOrgId!, apiKey!);
514
- });
515
- }
516
- await test('audit-log get-schema', async () => {
517
- const { runAuditLogGetSchema } = await import('../src/commands/audit-log.js');
518
- await runAuditLogGetSchema('user.signed_in', apiKey!);
519
- });
520
- const schemaFile = `/tmp/smoke-audit-schema-${Date.now()}.json`;
521
- const schemaAction = `smoke.test.${Date.now()}`;
522
- writeFileSync(
523
- schemaFile,
524
- JSON.stringify({
525
- targets: [{ type: 'user' }],
526
- actor: { metadata: {} },
527
- metadata: {},
528
- }),
529
- );
530
- await test('audit-log create-schema', async () => {
531
- const { runAuditLogCreateSchema } = await import('../src/commands/audit-log.js');
532
- await runAuditLogCreateSchema(schemaAction, schemaFile, apiKey!);
533
- });
534
- try {
535
- unlinkSync(schemaFile);
536
- } catch {}
537
-
538
- // =====================================================================
539
- // Feature Flag (read + toggle lifecycle)
540
- // =====================================================================
541
- section('Feature Flag');
542
- let ffSlug: string | undefined;
543
- await test('feature-flag list', async () => {
544
- const { runFeatureFlagList } = await import('../src/commands/feature-flag.js');
545
- await runFeatureFlagList({}, apiKey!);
546
- const output = parseOutput() as { data?: Array<{ key?: string }> } | null;
547
- ffSlug = output?.data?.[0]?.key;
548
- });
549
- if (ffSlug) {
550
- await test('feature-flag get', async () => {
551
- const { runFeatureFlagGet } = await import('../src/commands/feature-flag.js');
552
- await runFeatureFlagGet(ffSlug!, apiKey!);
553
- });
554
- await test('feature-flag disable', async () => {
555
- const { runFeatureFlagDisable } = await import('../src/commands/feature-flag.js');
556
- await runFeatureFlagDisable(ffSlug!, apiKey!);
557
- });
558
- await test('feature-flag enable', async () => {
559
- const { runFeatureFlagEnable } = await import('../src/commands/feature-flag.js');
560
- await runFeatureFlagEnable(ffSlug!, apiKey!);
561
- });
562
- await test('feature-flag add-target', async () => {
563
- const { runFeatureFlagAddTarget } = await import('../src/commands/feature-flag.js');
564
- await runFeatureFlagAddTarget(ffSlug!, `smoke-target-${Date.now()}`, apiKey!);
565
- });
566
- await test('feature-flag remove-target', async () => {
567
- const { runFeatureFlagRemoveTarget } = await import('../src/commands/feature-flag.js');
568
- await runFeatureFlagRemoveTarget(ffSlug!, `smoke-target-${Date.now()}`, apiKey!);
569
- });
570
- }
571
-
572
- // =====================================================================
573
- // Webhook (lifecycle)
574
- // =====================================================================
575
- section('Webhook (lifecycle)');
576
- await test('webhook list', async () => {
577
- const { runWebhookList } = await import('../src/commands/webhook.js');
578
- await runWebhookList(apiKey!);
579
- });
580
- let webhookId: string | undefined;
581
- await test('webhook create', async () => {
582
- const { runWebhookCreate } = await import('../src/commands/webhook.js');
583
- await runWebhookCreate(`https://smoke-test-${Date.now()}.example.com/webhook`, ['user.created'], apiKey!);
584
- const output = parseOutput() as { data?: { id?: string } } | null;
585
- webhookId = output?.data?.id;
586
- });
587
- if (webhookId) {
588
- await test('webhook delete', async () => {
589
- const { runWebhookDelete } = await import('../src/commands/webhook.js');
590
- await runWebhookDelete(webhookId!, apiKey!);
591
- });
592
- }
593
-
594
- // =====================================================================
595
- // Config (write operations — idempotent)
596
- // =====================================================================
597
- section('Config');
598
- await test('config redirect add', async () => {
599
- const { runConfigRedirectAdd } = await import('../src/commands/config.js');
600
- await runConfigRedirectAdd('http://localhost:19876/smoke-test-callback', apiKey!);
601
- });
602
- await test('config cors add', async () => {
603
- const { runConfigCorsAdd } = await import('../src/commands/config.js');
604
- await runConfigCorsAdd('http://localhost:19876', apiKey!);
605
- });
606
- await test('config homepage-url set', async () => {
607
- const { runConfigHomepageUrlSet } = await import('../src/commands/config.js');
608
- await runConfigHomepageUrlSet('http://localhost:3000', apiKey!);
609
- });
610
-
611
- // =====================================================================
612
- // Portal
613
- // =====================================================================
614
- section('Portal');
615
- if (testOrgId) {
616
- await test('portal generate-link', async () => {
617
- const { runPortalGenerateLink } = await import('../src/commands/portal.js');
618
- await runPortalGenerateLink({ intent: 'sso', organization: testOrgId! }, apiKey!);
619
- });
620
- }
621
-
622
- // =====================================================================
623
- // Vault (full lifecycle)
624
- // =====================================================================
625
- section('Vault (lifecycle)');
626
- await test('vault list', async () => {
627
- const { runVaultList } = await import('../src/commands/vault.js');
628
- await runVaultList({}, apiKey!);
629
- });
630
- const vaultName = `smoke-vault-${Date.now()}`;
631
- let vaultId: string | undefined;
632
-
633
- await test('vault create', async () => {
634
- const { runVaultCreate } = await import('../src/commands/vault.js');
635
- await runVaultCreate({ name: vaultName, value: 'smoke-test-secret', org: testOrgId }, apiKey!);
636
- const output = parseOutput() as { data?: { id?: string } } | null;
637
- vaultId = output?.data?.id;
638
- });
639
- if (vaultId) {
640
- await test('vault get', async () => {
641
- const { runVaultGet } = await import('../src/commands/vault.js');
642
- await runVaultGet(vaultId!, apiKey!);
643
- });
644
- await test('vault get-by-name', async () => {
645
- const { runVaultGetByName } = await import('../src/commands/vault.js');
646
- await runVaultGetByName(vaultName, apiKey!);
647
- });
648
- await test('vault describe', async () => {
649
- const { runVaultDescribe } = await import('../src/commands/vault.js');
650
- await runVaultDescribe(vaultId!, apiKey!);
651
- });
652
- await test('vault update', async () => {
653
- const { runVaultUpdate } = await import('../src/commands/vault.js');
654
- await runVaultUpdate({ id: vaultId!, value: 'updated-secret' }, apiKey!);
655
- });
656
- await test('vault list-versions', async () => {
657
- const { runVaultListVersions } = await import('../src/commands/vault.js');
658
- await runVaultListVersions(vaultId!, apiKey!);
659
- });
660
- await test('vault delete', async () => {
661
- const { runVaultDelete } = await import('../src/commands/vault.js');
662
- await runVaultDelete(vaultId!, apiKey!);
663
- });
664
- }
665
-
666
- // =====================================================================
667
- // API Key (lifecycle)
668
- // =====================================================================
669
- section('API Key (lifecycle)');
670
- if (testOrgId) {
671
- await test('api-key list', async () => {
672
- const { runApiKeyList } = await import('../src/commands/api-key-mgmt.js');
673
- await runApiKeyList({ organizationId: testOrgId! }, apiKey!);
674
- });
675
- let apiKeyId: string | undefined;
676
- let apiKeyValue: string | undefined;
677
- await test('api-key create', async () => {
678
- const { runApiKeyCreate } = await import('../src/commands/api-key-mgmt.js');
679
- await runApiKeyCreate({ organizationId: testOrgId!, name: `smoke-key-${Date.now()}` }, apiKey!);
680
- const output = parseOutput() as { data?: { id?: string; key?: string } } | null;
681
- apiKeyId = output?.data?.id;
682
- apiKeyValue = output?.data?.key;
683
- });
684
- if (apiKeyValue) {
685
- await test('api-key validate', async () => {
686
- const { runApiKeyValidate } = await import('../src/commands/api-key-mgmt.js');
687
- await runApiKeyValidate(apiKeyValue!, apiKey!);
688
- });
689
- }
690
- if (apiKeyId) {
691
- await test('api-key delete', async () => {
692
- const { runApiKeyDelete } = await import('../src/commands/api-key-mgmt.js');
693
- await runApiKeyDelete(apiKeyId!, apiKey!);
694
- });
695
- }
696
- }
697
-
698
- // =====================================================================
699
- // Org Domain (lifecycle: create → get → verify → delete)
700
- // =====================================================================
701
- section('Org Domain (lifecycle)');
702
- if (testOrgId) {
703
- let domainId: string | undefined;
704
- await test('org-domain create', async () => {
705
- const { runOrgDomainCreate } = await import('../src/commands/org-domain.js');
706
- await runOrgDomainCreate(`smoke-${Date.now()}.test`, testOrgId!, apiKey!);
707
- const output = parseOutput() as { data?: { id?: string } } | null;
708
- domainId = output?.data?.id;
709
- });
710
- if (domainId) {
711
- await test('org-domain get', async () => {
712
- const { runOrgDomainGet } = await import('../src/commands/org-domain.js');
713
- await runOrgDomainGet(domainId!, apiKey!);
714
- });
715
- await test('org-domain verify', async () => {
716
- const { runOrgDomainVerify } = await import('../src/commands/org-domain.js');
717
- await runOrgDomainVerify(domainId!, apiKey!);
718
- });
719
- await test('org-domain delete', async () => {
720
- const { runOrgDomainDelete } = await import('../src/commands/org-domain.js');
721
- await runOrgDomainDelete(domainId!, apiKey!);
722
- });
723
- }
724
- }
725
-
726
- // =====================================================================
727
- // Seed (write temp YAML, run, clean)
728
- // =====================================================================
729
- section('Seed');
730
- const seedFile = `/tmp/smoke-seed-${Date.now()}.yml`;
731
- writeFileSync(
732
- seedFile,
733
- `
734
- permissions:
735
- - name: Smoke Read
736
- slug: smoke-seed-read-${Date.now()}
737
- roles:
738
- - name: Smoke Viewer
739
- slug: smoke-seed-viewer-${Date.now()}
740
- `,
741
- );
742
- await test('seed (apply)', async () => {
743
- const { runSeed } = await import('../src/commands/seed.js');
744
- await runSeed({ file: seedFile }, apiKey!);
745
- });
746
- await test('seed (clean)', async () => {
747
- const { runSeed } = await import('../src/commands/seed.js');
748
- await runSeed({ clean: true }, apiKey!);
749
- });
750
- // Clean up temp files
751
- try {
752
- unlinkSync(seedFile);
753
- } catch {}
754
- try {
755
- if (existsSync('.workos-seed-state.json')) unlinkSync('.workos-seed-state.json');
756
- } catch {}
757
-
758
- // =====================================================================
759
- // Compound Workflows
760
- // =====================================================================
761
-
762
- // setup-org: creates org + domain + roles + portal link
763
- section('Setup Org (workflow)');
764
- const setupOrgName = `smoke-setup-${Date.now()}`;
765
- await test('setup-org (name + domain + roles)', async () => {
766
- const { runSetupOrg } = await import('../src/commands/setup-org.js');
767
- await runSetupOrg({ name: setupOrgName, domain: `${setupOrgName}.test`, roles: ['admin', 'viewer'] }, apiKey!);
768
- });
769
- // Clean up the setup-org's created org
770
- try {
771
- const orgs = await client.sdk.organizations.listOrganizations({ limit: 5 });
772
- const setupOrg = orgs.data.find((o) => o.name === setupOrgName);
773
- if (setupOrg) {
774
- cleanups.push(async () => {
775
- await client.sdk.organizations.deleteOrganization(setupOrg.id);
776
- process.stdout.write(` Cleaned up setup-org: ${setupOrg.id}\n`);
777
- });
778
- }
779
- } catch {}
780
-
781
- // debug-sso: test with a real connection if one exists
782
- section('Debug SSO (workflow)');
783
- try {
784
- const connections = await client.sdk.sso.listConnections({ limit: 1 });
785
- if (connections.data.length > 0) {
786
- const connId = connections.data[0].id;
787
- await test(`debug-sso (${connId})`, async () => {
788
- const { runDebugSso } = await import('../src/commands/debug-sso.js');
789
- await runDebugSso(connId, apiKey!);
790
- });
791
- } else {
792
- unmuteConsole();
793
- process.stdout.write(' (no connections found — skipping with synthetic test)\n');
794
- muteConsole();
795
- }
796
- } catch {
797
- unmuteConsole();
798
- process.stdout.write(' (could not list connections)\n');
799
- muteConsole();
800
- }
801
-
802
- // debug-sync: test with a real directory if one exists
803
- section('Debug Sync (workflow)');
804
- try {
805
- const directories = await client.sdk.directorySync.listDirectories({ limit: 1 });
806
- if (directories.data.length > 0) {
807
- const dirId = directories.data[0].id;
808
- await test(`debug-sync (${dirId})`, async () => {
809
- const { runDebugSync } = await import('../src/commands/debug-sync.js');
810
- await runDebugSync(dirId, apiKey!);
811
- });
812
- } else {
813
- unmuteConsole();
814
- process.stdout.write(' (no directories found — skipping)\n');
815
- muteConsole();
816
- }
817
- } catch {
818
- unmuteConsole();
819
- process.stdout.write(' (could not list directories)\n');
820
- muteConsole();
821
- }
822
-
823
- // onboard-user: send a test invitation (will be revoked after)
824
- section('Onboard User (workflow)');
825
- if (testOrgId) {
826
- let invitationId: string | undefined;
827
- await test('onboard-user (send invitation)', async () => {
828
- const { runOnboardUser } = await import('../src/commands/onboard-user.js');
829
- await runOnboardUser({ email: `smoke-test-${Date.now()}@example.com`, org: testOrgId! }, apiKey!);
830
- const output = parseOutput() as { invitationId?: string } | null;
831
- invitationId = output?.invitationId;
832
- });
833
- // Clean up: revoke the invitation
834
- if (invitationId) {
835
- cleanups.push(async () => {
836
- try {
837
- await client.sdk.userManagement.revokeInvitation(invitationId!);
838
- process.stdout.write(` Revoked invitation: ${invitationId}\n`);
839
- } catch {}
840
- });
841
- }
842
- }
843
-
844
- // --- Cleanup ---
845
- unmuteConsole();
846
- process.stdout.write('\nCleanup:\n');
847
- for (const cleanup of cleanups.reverse()) {
848
- try {
849
- await cleanup();
850
- } catch (e) {
851
- process.stdout.write(` ⚠ Cleanup failed: ${e instanceof Error ? e.message : e}\n`);
852
- }
853
- }
854
-
855
- // --- Summary ---
856
- const passed = results.filter((r) => r.status === 'pass').length;
857
- const failed = results.filter((r) => r.status === 'fail').length;
858
- const skipped = results.filter((r) => r.status === 'skip').length;
859
-
860
- process.stdout.write(`\n${'─'.repeat(40)}\n`);
861
- process.stdout.write(`Results: ${passed} passed, ${failed} failed, ${skipped} skipped\n`);
862
-
863
- if (failed > 0) {
864
- process.stdout.write('\nFailures:\n');
865
- for (const r of results.filter((r) => r.status === 'fail')) {
866
- process.stdout.write(` ✗ ${r.name}: ${r.error}\n`);
867
- }
868
- realExit.call(process, 1);
869
- }
870
-
871
- process.stdout.write('\n');
872
- }
873
-
874
- run().catch((error) => {
875
- unmuteConsole();
876
- process.stdout.write(`\n💥 Smoke test crashed: ${error instanceof Error ? error.message : error}\n`);
877
- if (error instanceof Error && error.stack) {
878
- process.stdout.write(error.stack + '\n');
879
- }
880
- realExit.call(process, 1);
881
- });