workos 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +353 -8
  2. package/dist/bin.js +938 -128
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/api-key-mgmt.d.ts +16 -0
  5. package/dist/commands/api-key-mgmt.js +96 -0
  6. package/dist/commands/api-key-mgmt.js.map +1 -0
  7. package/dist/commands/audit-log.d.ts +26 -0
  8. package/dist/commands/audit-log.js +155 -0
  9. package/dist/commands/audit-log.js.map +1 -0
  10. package/dist/commands/config.d.ts +3 -0
  11. package/dist/commands/config.js +54 -0
  12. package/dist/commands/config.js.map +1 -0
  13. package/dist/commands/connection.d.ts +13 -0
  14. package/dist/commands/connection.js +94 -0
  15. package/dist/commands/connection.js.map +1 -0
  16. package/dist/commands/debug-sso.d.ts +1 -0
  17. package/dist/commands/debug-sso.js +78 -0
  18. package/dist/commands/debug-sso.js.map +1 -0
  19. package/dist/commands/debug-sync.d.ts +1 -0
  20. package/dist/commands/debug-sync.js +102 -0
  21. package/dist/commands/debug-sync.js.map +1 -0
  22. package/dist/commands/directory.d.ts +27 -0
  23. package/dist/commands/directory.js +174 -0
  24. package/dist/commands/directory.js.map +1 -0
  25. package/dist/commands/env.js +41 -28
  26. package/dist/commands/env.js.map +1 -1
  27. package/dist/commands/event.d.ts +9 -0
  28. package/dist/commands/event.js +43 -0
  29. package/dist/commands/event.js.map +1 -0
  30. package/dist/commands/feature-flag.d.ts +12 -0
  31. package/dist/commands/feature-flag.js +96 -0
  32. package/dist/commands/feature-flag.js.map +1 -0
  33. package/dist/commands/install.js +13 -20
  34. package/dist/commands/install.js.map +1 -1
  35. package/dist/commands/invitation.d.ts +19 -0
  36. package/dist/commands/invitation.js +94 -0
  37. package/dist/commands/invitation.js.map +1 -0
  38. package/dist/commands/membership.d.ts +20 -0
  39. package/dist/commands/membership.js +129 -0
  40. package/dist/commands/membership.js.map +1 -0
  41. package/dist/commands/onboard-user.d.ts +7 -0
  42. package/dist/commands/onboard-user.js +61 -0
  43. package/dist/commands/onboard-user.js.map +1 -0
  44. package/dist/commands/org-domain.d.ts +4 -0
  45. package/dist/commands/org-domain.js +45 -0
  46. package/dist/commands/org-domain.js.map +1 -0
  47. package/dist/commands/organization.d.ts +1 -5
  48. package/dist/commands/organization.js +34 -73
  49. package/dist/commands/organization.js.map +1 -1
  50. package/dist/commands/permission.d.ts +20 -0
  51. package/dist/commands/permission.js +93 -0
  52. package/dist/commands/permission.js.map +1 -0
  53. package/dist/commands/portal.d.ts +7 -0
  54. package/dist/commands/portal.js +26 -0
  55. package/dist/commands/portal.js.map +1 -0
  56. package/dist/commands/role.d.ts +17 -0
  57. package/dist/commands/role.js +122 -0
  58. package/dist/commands/role.js.map +1 -0
  59. package/dist/commands/seed.d.ts +4 -0
  60. package/dist/commands/seed.js +238 -0
  61. package/dist/commands/seed.js.map +1 -0
  62. package/dist/commands/session.d.ts +8 -0
  63. package/dist/commands/session.js +63 -0
  64. package/dist/commands/session.js.map +1 -0
  65. package/dist/commands/setup-org.d.ts +6 -0
  66. package/dist/commands/setup-org.js +99 -0
  67. package/dist/commands/setup-org.js.map +1 -0
  68. package/dist/commands/user.js +35 -71
  69. package/dist/commands/user.js.map +1 -1
  70. package/dist/commands/vault.d.ts +24 -0
  71. package/dist/commands/vault.js +120 -0
  72. package/dist/commands/vault.js.map +1 -0
  73. package/dist/commands/webhook.d.ts +3 -0
  74. package/dist/commands/webhook.js +73 -0
  75. package/dist/commands/webhook.js.map +1 -0
  76. package/dist/dashboard/components/DiffPanel.js.map +1 -1
  77. package/dist/dashboard/lib/logo-frames.js +1 -1
  78. package/dist/dashboard/lib/logo-frames.js.map +1 -1
  79. package/dist/doctor/checks/dashboard.js.map +1 -1
  80. package/dist/doctor/checks/environment.js.map +1 -1
  81. package/dist/integrations/go/index.js +1 -3
  82. package/dist/integrations/go/index.js.map +1 -1
  83. package/dist/lib/adapters/headless-adapter.d.ts +67 -0
  84. package/dist/lib/adapters/headless-adapter.js +263 -0
  85. package/dist/lib/adapters/headless-adapter.js.map +1 -0
  86. package/dist/lib/adapters/index.d.ts +1 -0
  87. package/dist/lib/adapters/index.js +1 -0
  88. package/dist/lib/adapters/index.js.map +1 -1
  89. package/dist/lib/agent-interface.d.ts +3 -11
  90. package/dist/lib/agent-interface.js +1 -13
  91. package/dist/lib/agent-interface.js.map +1 -1
  92. package/dist/lib/api-error-handler.d.ts +6 -0
  93. package/dist/lib/api-error-handler.js +58 -0
  94. package/dist/lib/api-error-handler.js.map +1 -0
  95. package/dist/lib/api-key.js +5 -1
  96. package/dist/lib/api-key.js.map +1 -1
  97. package/dist/lib/config.js.map +1 -1
  98. package/dist/lib/credential-proxy.js +0 -6
  99. package/dist/lib/credential-proxy.js.map +1 -1
  100. package/dist/lib/device-auth.js +1 -1
  101. package/dist/lib/device-auth.js.map +1 -1
  102. package/dist/lib/ensure-auth.js +25 -4
  103. package/dist/lib/ensure-auth.js.map +1 -1
  104. package/dist/lib/installer-core.d.ts +12 -12
  105. package/dist/lib/run-with-core.js +25 -4
  106. package/dist/lib/run-with-core.js.map +1 -1
  107. package/dist/lib/validation/validator.js +0 -1
  108. package/dist/lib/validation/validator.js.map +1 -1
  109. package/dist/lib/workos-client.d.ts +58 -0
  110. package/dist/lib/workos-client.js +137 -0
  111. package/dist/lib/workos-client.js.map +1 -0
  112. package/dist/run.d.ts +7 -0
  113. package/dist/run.js +5 -2
  114. package/dist/run.js.map +1 -1
  115. package/dist/smoke-test.ts +881 -0
  116. package/dist/steps/run-prettier.js +1 -1
  117. package/dist/steps/run-prettier.js.map +1 -1
  118. package/dist/utils/analytics.d.ts +1 -1
  119. package/dist/utils/analytics.js.map +1 -1
  120. package/dist/utils/clack-utils.js +1 -1
  121. package/dist/utils/clack-utils.js.map +1 -1
  122. package/dist/utils/environment.js +8 -0
  123. package/dist/utils/environment.js.map +1 -1
  124. package/dist/utils/exit-codes.d.ts +22 -0
  125. package/dist/utils/exit-codes.js +30 -0
  126. package/dist/utils/exit-codes.js.map +1 -0
  127. package/dist/utils/help-json.d.ts +45 -0
  128. package/dist/utils/help-json.js +1161 -0
  129. package/dist/utils/help-json.js.map +1 -0
  130. package/dist/utils/ndjson.d.ts +16 -0
  131. package/dist/utils/ndjson.js +18 -0
  132. package/dist/utils/ndjson.js.map +1 -0
  133. package/dist/utils/output.d.ts +40 -0
  134. package/dist/utils/output.js +95 -0
  135. package/dist/utils/output.js.map +1 -0
  136. package/dist/utils/package-manager.js +2 -3
  137. package/dist/utils/package-manager.js.map +1 -1
  138. package/dist/utils/register-subcommand.d.ts +7 -0
  139. package/dist/utils/register-subcommand.js +36 -0
  140. package/dist/utils/register-subcommand.js.map +1 -0
  141. package/dist/utils/telemetry-types.d.ts +1 -1
  142. package/dist/utils/telemetry-types.js.map +1 -1
  143. package/dist/utils/types.d.ts +12 -0
  144. package/dist/utils/types.js.map +1 -1
  145. package/package.json +20 -16
  146. package/skills/workos-management/SKILL.md +250 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workos",
3
- "version": "0.7.3",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "description": "The Official Workos CLI",
6
6
  "repository": {
@@ -37,35 +37,38 @@
37
37
  "definition": "dist/index.d.ts"
38
38
  },
39
39
  "dependencies": {
40
- "@anthropic-ai/claude-agent-sdk": "~0.2.19",
41
- "@anthropic-ai/sdk": "^0.71.2",
42
- "@clack/core": "^0.5.0",
43
- "@clack/prompts": "0.11.0",
40
+ "@anthropic-ai/claude-agent-sdk": "~0.2.62",
41
+ "@anthropic-ai/sdk": "^0.78.0",
42
+ "@clack/core": "^1.0.1",
43
+ "@clack/prompts": "1.0.1",
44
44
  "@napi-rs/keyring": "^1.2.0",
45
+ "@workos-inc/node": "^8.7.0",
45
46
  "chalk": "^5.6.2",
46
47
  "diff": "^8.0.3",
47
48
  "fast-glob": "^3.3.3",
48
- "ink": "^6.6.0",
49
+ "ink": "^6.8.0",
49
50
  "opn": "^5.4.0",
50
- "react": "^19.2.3",
51
- "semver": "^7.7.3",
51
+ "react": "^19.2.4",
52
+ "semver": "^7.7.4",
52
53
  "uuid": "^13.0.0",
53
- "xstate": "^5.25.1",
54
+ "xstate": "^5.28.0",
55
+ "yaml": "^2.8.2",
54
56
  "yargs": "^18.0.0",
55
- "zod": "^4.3.5"
57
+ "zod": "^4.3.6"
56
58
  },
57
59
  "devDependencies": {
58
60
  "@statelyai/inspect": "^0.4.0",
59
61
  "@types/node": "~22.19.7",
60
62
  "@types/opn": "5.1.0",
61
- "@types/react": "^19.2.9",
63
+ "@types/react": "^19.2.14",
62
64
  "@types/semver": "^7.7.1",
63
65
  "@types/yargs": "^17.0.35",
64
66
  "@vitest/coverage-v8": "^4.0.18",
65
67
  "@vitest/ui": "^4.0.18",
66
- "dotenv": "^17.2.3",
67
- "p-limit": "^7.2.0",
68
- "prettier": "^3.8.0",
68
+ "dotenv": "^17.3.1",
69
+ "oxfmt": "^0.35.0",
70
+ "oxlint": "^1.50.0",
71
+ "p-limit": "^7.3.0",
69
72
  "tsx": "^4.20.3",
70
73
  "typescript": "^5.9.3",
71
74
  "vitest": "^4.0.18"
@@ -80,8 +83,9 @@
80
83
  "build:watch": "pnpm tsc -w",
81
84
  "build": "pnpm tsc",
82
85
  "postbuild": "chmod +x ./dist/bin.js && cp -r scripts/** dist",
83
- "lint": "prettier --check \"{lib,src,test}/**/*.ts\"",
84
- "format": "prettier --write .",
86
+ "lint": "oxlint",
87
+ "format": "oxfmt .",
88
+ "format:check": "oxfmt --check .",
85
89
  "try": "tsx dev.ts",
86
90
  "dev": "pnpm build && pnpm link --global && pnpm build:watch",
87
91
  "test": "vitest run",
@@ -0,0 +1,250 @@
1
+ ---
2
+ name: workos-management
3
+ description: Manage WorkOS resources (orgs, users, roles, SSO, directories, webhooks, audit logs) via CLI. Use when configuring RBAC, onboarding orgs/users, debugging SSO/DSync, or managing WorkOS settings.
4
+ ---
5
+
6
+ # WorkOS Management Commands
7
+
8
+ Use these commands to manage WorkOS resources directly from the terminal. The CLI must be authenticated via `workos login` or `WORKOS_API_KEY` env var.
9
+
10
+ All commands support `--json` for structured output. Use `--json` when you need to parse output (e.g., extract an ID).
11
+
12
+ ## Quick Reference
13
+
14
+ | Task | Command |
15
+ | ---------------------- | ---------------------------------------------------------------------------- |
16
+ | List organizations | `workos organization list` |
17
+ | Create organization | `workos organization create "Acme Corp" acme.com:verified` |
18
+ | List users | `workos user list --email=alice@acme.com` |
19
+ | Create permission | `workos permission create --slug=read-users --name="Read Users"` |
20
+ | Create role | `workos role create --slug=admin --name=Admin` |
21
+ | Assign perms to role | `workos role set-permissions admin --permissions=read-users,write-users` |
22
+ | Create org-scoped role | `workos role create --slug=admin --name=Admin --org=org_xxx` |
23
+ | Add user to org | `workos membership create --org=org_xxx --user=user_xxx` |
24
+ | Send invitation | `workos invitation send --email=alice@acme.com --org=org_xxx` |
25
+ | Revoke session | `workos session revoke <sessionId>` |
26
+ | Add redirect URI | `workos config redirect add http://localhost:3000/callback` |
27
+ | Add CORS origin | `workos config cors add http://localhost:3000` |
28
+ | Set homepage URL | `workos config homepage-url set http://localhost:3000` |
29
+ | Create webhook | `workos webhook create --url=https://example.com/hook --events=user.created` |
30
+ | List SSO connections | `workos connection list --org=org_xxx` |
31
+ | List directories | `workos directory list` |
32
+ | Toggle feature flag | `workos feature-flag enable my-flag` |
33
+ | Store a secret | `workos vault create --name=api-secret --value=sk_xxx --org=org_xxx` |
34
+ | Generate portal link | `workos portal generate-link --intent=sso --org=org_xxx` |
35
+ | Seed environment | `workos seed --file=workos-seed.yml` |
36
+ | Debug SSO | `workos debug-sso conn_xxx` |
37
+ | Debug directory sync | `workos debug-sync directory_xxx` |
38
+ | Set up an org | `workos setup-org "Acme Corp" --domain=acme.com --roles=admin,viewer` |
39
+ | Onboard a user | `workos onboard-user alice@acme.com --org=org_xxx --role=admin` |
40
+
41
+ ## Workflows
42
+
43
+ ### Setting up RBAC
44
+
45
+ When you see permission checks in the codebase (e.g., `hasPermission('read-users')`), create the matching WorkOS resources:
46
+
47
+ ```bash
48
+ workos permission create --slug=read-users --name="Read Users"
49
+ workos permission create --slug=write-users --name="Write Users"
50
+ workos role create --slug=admin --name=Admin
51
+ workos role set-permissions admin --permissions=read-users,write-users
52
+ workos role create --slug=viewer --name=Viewer
53
+ workos role set-permissions viewer --permissions=read-users
54
+ ```
55
+
56
+ For organization-scoped roles, add `--org=org_xxx` to role commands.
57
+
58
+ ### Organization Onboarding
59
+
60
+ One-shot setup with the compound command:
61
+
62
+ ```bash
63
+ workos setup-org "Acme Corp" --domain=acme.com --roles=admin,viewer
64
+ ```
65
+
66
+ Or step by step:
67
+
68
+ ```bash
69
+ ORG_ID=$(workos organization create "Acme Corp" --json | jq -r '.data.id')
70
+ workos org-domain create acme.com --org=$ORG_ID
71
+ workos role create --slug=admin --name=Admin --org=$ORG_ID
72
+ workos portal generate-link --intent=sso --org=$ORG_ID
73
+ ```
74
+
75
+ ### User Onboarding
76
+
77
+ ```bash
78
+ workos onboard-user alice@acme.com --org=org_xxx --role=admin
79
+ ```
80
+
81
+ Or step by step:
82
+
83
+ ```bash
84
+ workos invitation send --email=alice@acme.com --org=org_xxx --role=admin
85
+ workos membership create --org=org_xxx --user=user_xxx --role=admin
86
+ ```
87
+
88
+ ### Local Development Setup
89
+
90
+ Configure WorkOS for local development:
91
+
92
+ ```bash
93
+ workos config redirect add http://localhost:3000/callback
94
+ workos config cors add http://localhost:3000
95
+ workos config homepage-url set http://localhost:3000
96
+ ```
97
+
98
+ ### Environment Seeding
99
+
100
+ Create a `workos-seed.yml` file in your repo:
101
+
102
+ ```yaml
103
+ permissions:
104
+ - name: 'Read Users'
105
+ slug: 'read-users'
106
+ - name: 'Write Users'
107
+ slug: 'write-users'
108
+
109
+ roles:
110
+ - name: 'Admin'
111
+ slug: 'admin'
112
+ permissions: ['read-users', 'write-users']
113
+ - name: 'Viewer'
114
+ slug: 'viewer'
115
+ permissions: ['read-users']
116
+
117
+ organizations:
118
+ - name: 'Test Org'
119
+ domains: ['test.com']
120
+
121
+ config:
122
+ redirect_uris: ['http://localhost:3000/callback']
123
+ cors_origins: ['http://localhost:3000']
124
+ homepage_url: 'http://localhost:3000'
125
+ ```
126
+
127
+ Then run:
128
+
129
+ ```bash
130
+ workos seed --file=workos-seed.yml # Create resources
131
+ workos seed --clean # Tear down seeded resources
132
+ ```
133
+
134
+ ### Debugging SSO
135
+
136
+ ```bash
137
+ workos debug-sso conn_xxx
138
+ ```
139
+
140
+ Shows: connection type/state, organization binding, recent auth events, and common issues (inactive connection, org mismatch).
141
+
142
+ ### Debugging Directory Sync
143
+
144
+ ```bash
145
+ workos debug-sync directory_xxx
146
+ ```
147
+
148
+ Shows: directory type/state, user/group counts, recent sync events, and stall detection.
149
+
150
+ ### Webhook Management
151
+
152
+ ```bash
153
+ workos webhook list
154
+ workos webhook create --url=https://example.com/hook --events=user.created,dsync.user.created
155
+ workos webhook delete we_xxx
156
+ ```
157
+
158
+ ### Audit Logs
159
+
160
+ ```bash
161
+ workos audit-log create-event --org=org_xxx --action=user.login --actor-type=user --actor-id=user_xxx
162
+ workos audit-log list-actions
163
+ workos audit-log get-schema user.login
164
+ workos audit-log export --org=org_xxx --range-start=2024-01-01 --range-end=2024-02-01
165
+ workos audit-log get-retention --org=org_xxx
166
+ ```
167
+
168
+ ## Using --json for Structured Output
169
+
170
+ All commands support `--json` for machine-readable output. Use this when you need to extract values:
171
+
172
+ ```bash
173
+ # Get an organization ID
174
+ workos organization list --json | jq '.data[0].id'
175
+
176
+ # Get a connection's state
177
+ workos connection get conn_xxx --json | jq '.state'
178
+
179
+ # List all role slugs
180
+ workos role list --json | jq '.data[].slug'
181
+
182
+ # Chain commands: create org then add domain
183
+ ORG_ID=$(workos organization create "Acme" --json | jq -r '.data.id')
184
+ workos org-domain create acme.com --org=$ORG_ID
185
+ ```
186
+
187
+ JSON output format:
188
+
189
+ - **List commands**: `{ "data": [...], "listMetadata": { "before": null, "after": "cursor" } }`
190
+ - **Get commands**: Raw object (no wrapper)
191
+ - **Create/Update/Delete**: `{ "status": "ok", "message": "...", "data": {...} }`
192
+ - **Errors**: `{ "error": { "code": "...", "message": "..." } }` on stderr
193
+
194
+ ## Command Reference
195
+
196
+ ### Resource Commands
197
+
198
+ | Command | Subcommands |
199
+ | --------------------- | ----------------------------------------------------------------------------------------------------- |
200
+ | `workos organization` | `list`, `get`, `create`, `update`, `delete` |
201
+ | `workos user` | `list`, `get`, `update`, `delete` |
202
+ | `workos role` | `list`, `get`, `create`, `update`, `delete`, `set-permissions`, `add-permission`, `remove-permission` |
203
+ | `workos permission` | `list`, `get`, `create`, `update`, `delete` |
204
+ | `workos membership` | `list`, `get`, `create`, `update`, `delete`, `deactivate`, `reactivate` |
205
+ | `workos invitation` | `list`, `get`, `send`, `revoke`, `resend` |
206
+ | `workos session` | `list`, `revoke` |
207
+ | `workos connection` | `list`, `get`, `delete` |
208
+ | `workos directory` | `list`, `get`, `delete`, `list-users`, `list-groups` |
209
+ | `workos event` | `list` (requires `--events` flag) |
210
+ | `workos audit-log` | `create-event`, `export`, `list-actions`, `get-schema`, `create-schema`, `get-retention` |
211
+ | `workos feature-flag` | `list`, `get`, `enable`, `disable`, `add-target`, `remove-target` |
212
+ | `workos webhook` | `list`, `create`, `delete` |
213
+ | `workos config` | `redirect add`, `cors add`, `homepage-url set` |
214
+ | `workos portal` | `generate-link` |
215
+ | `workos vault` | `list`, `get`, `get-by-name`, `create`, `update`, `delete`, `describe`, `list-versions` |
216
+ | `workos api-key` | `list`, `create`, `validate`, `delete` |
217
+ | `workos org-domain` | `get`, `create`, `verify`, `delete` |
218
+
219
+ ### Workflow Commands
220
+
221
+ | Command | Purpose |
222
+ | ----------------------------- | ------------------------------------------- |
223
+ | `workos seed --file=<yaml>` | Declarative resource provisioning from YAML |
224
+ | `workos seed --clean` | Tear down seeded resources |
225
+ | `workos setup-org <name>` | One-shot org onboarding |
226
+ | `workos onboard-user <email>` | Send invitation + optional wait |
227
+ | `workos debug-sso <connId>` | SSO connection diagnostics |
228
+ | `workos debug-sync <dirId>` | Directory sync diagnostics |
229
+
230
+ ### Common Flags
231
+
232
+ | Flag | Purpose | Scope |
233
+ | ------------------------------------------- | ------------------------ | --------------------------------------------------- |
234
+ | `--json` | Structured JSON output | All commands |
235
+ | `--api-key` | Override API key | Resource commands |
236
+ | `--org` | Organization scope | role, membership, invitation, api-key, feature-flag |
237
+ | `--force` | Skip confirmation prompt | connection delete, directory delete |
238
+ | `--limit`, `--before`, `--after`, `--order` | Pagination | All list commands |
239
+
240
+ ## Dashboard-Only Operations
241
+
242
+ These CANNOT be done from the CLI — tell the user to visit the WorkOS Dashboard:
243
+
244
+ - **Enable/disable auth methods** — Dashboard > Authentication
245
+ - **Configure session lifetime** — Dashboard > Authentication > Sessions
246
+ - **Set up social login providers** (Google, GitHub, etc.) — Dashboard > Authentication > Social
247
+ - **Create feature flags** — Dashboard > Feature Flags (toggle/target operations work via CLI)
248
+ - **Configure branding** (logos, colors) — Dashboard > Branding
249
+ - **Set up email templates** — Dashboard > Email
250
+ - **Manage billing/plan** — Dashboard > Settings > Billing