workos 0.7.3 → 0.8.1
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.
- package/README.md +353 -8
- package/dist/bin.js +938 -128
- package/dist/bin.js.map +1 -1
- package/dist/commands/api-key-mgmt.d.ts +16 -0
- package/dist/commands/api-key-mgmt.js +96 -0
- package/dist/commands/api-key-mgmt.js.map +1 -0
- package/dist/commands/audit-log.d.ts +26 -0
- package/dist/commands/audit-log.js +155 -0
- package/dist/commands/audit-log.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.js +54 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connection.d.ts +13 -0
- package/dist/commands/connection.js +94 -0
- package/dist/commands/connection.js.map +1 -0
- package/dist/commands/debug-sso.d.ts +1 -0
- package/dist/commands/debug-sso.js +78 -0
- package/dist/commands/debug-sso.js.map +1 -0
- package/dist/commands/debug-sync.d.ts +1 -0
- package/dist/commands/debug-sync.js +102 -0
- package/dist/commands/debug-sync.js.map +1 -0
- package/dist/commands/directory.d.ts +27 -0
- package/dist/commands/directory.js +174 -0
- package/dist/commands/directory.js.map +1 -0
- package/dist/commands/env.js +41 -28
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/event.d.ts +9 -0
- package/dist/commands/event.js +43 -0
- package/dist/commands/event.js.map +1 -0
- package/dist/commands/feature-flag.d.ts +12 -0
- package/dist/commands/feature-flag.js +96 -0
- package/dist/commands/feature-flag.js.map +1 -0
- package/dist/commands/install-skill.js +3 -5
- package/dist/commands/install-skill.js.map +1 -1
- package/dist/commands/install.js +13 -20
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/invitation.d.ts +19 -0
- package/dist/commands/invitation.js +94 -0
- package/dist/commands/invitation.js.map +1 -0
- package/dist/commands/membership.d.ts +20 -0
- package/dist/commands/membership.js +129 -0
- package/dist/commands/membership.js.map +1 -0
- package/dist/commands/onboard-user.d.ts +7 -0
- package/dist/commands/onboard-user.js +61 -0
- package/dist/commands/onboard-user.js.map +1 -0
- package/dist/commands/org-domain.d.ts +4 -0
- package/dist/commands/org-domain.js +45 -0
- package/dist/commands/org-domain.js.map +1 -0
- package/dist/commands/organization.d.ts +1 -5
- package/dist/commands/organization.js +34 -73
- package/dist/commands/organization.js.map +1 -1
- package/dist/commands/permission.d.ts +20 -0
- package/dist/commands/permission.js +93 -0
- package/dist/commands/permission.js.map +1 -0
- package/dist/commands/portal.d.ts +7 -0
- package/dist/commands/portal.js +26 -0
- package/dist/commands/portal.js.map +1 -0
- package/dist/commands/role.d.ts +17 -0
- package/dist/commands/role.js +122 -0
- package/dist/commands/role.js.map +1 -0
- package/dist/commands/seed.d.ts +4 -0
- package/dist/commands/seed.js +238 -0
- package/dist/commands/seed.js.map +1 -0
- package/dist/commands/session.d.ts +8 -0
- package/dist/commands/session.js +63 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup-org.d.ts +6 -0
- package/dist/commands/setup-org.js +99 -0
- package/dist/commands/setup-org.js.map +1 -0
- package/dist/commands/user.js +35 -71
- package/dist/commands/user.js.map +1 -1
- package/dist/commands/vault.d.ts +24 -0
- package/dist/commands/vault.js +120 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/commands/webhook.d.ts +3 -0
- package/dist/commands/webhook.js +73 -0
- package/dist/commands/webhook.js.map +1 -0
- package/dist/dashboard/components/DiffPanel.js.map +1 -1
- package/dist/dashboard/lib/logo-frames.js +1 -1
- package/dist/dashboard/lib/logo-frames.js.map +1 -1
- package/dist/doctor/checks/dashboard.js.map +1 -1
- package/dist/doctor/checks/environment.js.map +1 -1
- package/dist/integrations/go/index.js +1 -3
- package/dist/integrations/go/index.js.map +1 -1
- package/dist/lib/adapters/headless-adapter.d.ts +67 -0
- package/dist/lib/adapters/headless-adapter.js +263 -0
- package/dist/lib/adapters/headless-adapter.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +1 -0
- package/dist/lib/adapters/index.js +1 -0
- package/dist/lib/adapters/index.js.map +1 -1
- package/dist/lib/agent-interface.d.ts +3 -11
- package/dist/lib/agent-interface.js +3 -19
- package/dist/lib/agent-interface.js.map +1 -1
- package/dist/lib/api-error-handler.d.ts +6 -0
- package/dist/lib/api-error-handler.js +58 -0
- package/dist/lib/api-error-handler.js.map +1 -0
- package/dist/lib/api-key.js +5 -1
- package/dist/lib/api-key.js.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/credential-proxy.js +0 -6
- package/dist/lib/credential-proxy.js.map +1 -1
- package/dist/lib/device-auth.js +1 -1
- package/dist/lib/device-auth.js.map +1 -1
- package/dist/lib/ensure-auth.js +25 -4
- package/dist/lib/ensure-auth.js.map +1 -1
- package/dist/lib/installer-core.d.ts +12 -12
- package/dist/lib/run-with-core.js +25 -4
- package/dist/lib/run-with-core.js.map +1 -1
- package/dist/lib/validation/validator.js +0 -1
- package/dist/lib/validation/validator.js.map +1 -1
- package/dist/lib/workos-client.d.ts +58 -0
- package/dist/lib/workos-client.js +137 -0
- package/dist/lib/workos-client.js.map +1 -0
- package/dist/run.d.ts +7 -0
- package/dist/run.js +5 -2
- package/dist/run.js.map +1 -1
- package/dist/smoke-test.ts +881 -0
- package/dist/steps/run-prettier.js +1 -1
- package/dist/steps/run-prettier.js.map +1 -1
- package/dist/utils/analytics.d.ts +1 -1
- package/dist/utils/analytics.js.map +1 -1
- package/dist/utils/clack-utils.js +1 -1
- package/dist/utils/clack-utils.js.map +1 -1
- package/dist/utils/environment.js +8 -0
- package/dist/utils/environment.js.map +1 -1
- package/dist/utils/exit-codes.d.ts +22 -0
- package/dist/utils/exit-codes.js +30 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/help-json.d.ts +45 -0
- package/dist/utils/help-json.js +1161 -0
- package/dist/utils/help-json.js.map +1 -0
- package/dist/utils/ndjson.d.ts +16 -0
- package/dist/utils/ndjson.js +18 -0
- package/dist/utils/ndjson.js.map +1 -0
- package/dist/utils/output.d.ts +40 -0
- package/dist/utils/output.js +95 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/package-manager.js +2 -3
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/paths.d.ts +5 -0
- package/dist/utils/paths.js +18 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/register-subcommand.d.ts +7 -0
- package/dist/utils/register-subcommand.js +36 -0
- package/dist/utils/register-subcommand.js.map +1 -0
- package/dist/utils/telemetry-types.d.ts +1 -1
- package/dist/utils/telemetry-types.js.map +1 -1
- package/dist/utils/types.d.ts +12 -0
- package/dist/utils/types.js.map +1 -1
- package/package.json +20 -16
- package/skills/workos-management/SKILL.md +250 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { homedir } from 'os';
|
|
2
|
-
import { join
|
|
2
|
+
import { join } from 'path';
|
|
3
3
|
import { existsSync } from 'fs';
|
|
4
4
|
import { mkdir, copyFile, readdir } from 'fs/promises';
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
6
5
|
import chalk from 'chalk';
|
|
6
|
+
import { getPackageRoot } from '../utils/paths.js';
|
|
7
7
|
export function createAgents(home) {
|
|
8
8
|
return {
|
|
9
9
|
'claude-code': {
|
|
@@ -33,9 +33,7 @@ export function createAgents(home) {
|
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
export function getSkillsDir() {
|
|
36
|
-
|
|
37
|
-
// From dist/src/commands/install-skill.js -> skills/
|
|
38
|
-
return join(dirname(currentFile), '..', '..', '..', 'skills');
|
|
36
|
+
return join(getPackageRoot(import.meta.url), 'skills');
|
|
39
37
|
}
|
|
40
38
|
export async function discoverSkills(skillsDir) {
|
|
41
39
|
const entries = await readdir(skillsDir, { withFileTypes: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from 'os';\nimport { join, dirname } from 'path';\nimport { existsSync } from 'fs';\nimport { mkdir, copyFile, readdir } from 'fs/promises';\nimport { fileURLToPath } from 'url';\nimport chalk from 'chalk';\n\nexport interface AgentConfig {\n name: string;\n displayName: string;\n globalSkillsDir: string;\n detect: () => boolean;\n}\n\nexport function createAgents(home: string): Record<string, AgentConfig> {\n return {\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n globalSkillsDir: join(home, '.claude/skills'),\n detect: () => existsSync(join(home, '.claude')),\n },\n codex: {\n name: 'codex',\n displayName: 'Codex',\n globalSkillsDir: join(home, '.codex/skills'),\n detect: () => existsSync(join(home, '.codex')),\n },\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n globalSkillsDir: join(home, '.cursor/skills'),\n detect: () => existsSync(join(home, '.cursor')),\n },\n goose: {\n name: 'goose',\n displayName: 'Goose',\n globalSkillsDir: join(home, '.config/goose/skills'),\n detect: () => existsSync(join(home, '.config/goose')),\n },\n };\n}\n\nexport interface InstallSkillOptions {\n list?: boolean;\n skill?: string[];\n agent?: string[];\n}\n\nexport function getSkillsDir(): string {\n const currentFile = fileURLToPath(import.meta.url);\n // From dist/src/commands/install-skill.js -> skills/\n return join(dirname(currentFile), '..', '..', '..', 'skills');\n}\n\nexport async function discoverSkills(skillsDir: string): Promise<string[]> {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n\n return entries.filter((e) => e.isDirectory() && existsSync(join(skillsDir, e.name, 'SKILL.md'))).map((e) => e.name);\n}\n\nexport function detectAgents(agents: Record<string, AgentConfig>, filter?: string[]): AgentConfig[] {\n const detected: AgentConfig[] = [];\n\n for (const [key, config] of Object.entries(agents)) {\n if (filter && !filter.includes(key)) continue;\n if (config.detect()) {\n detected.push(config);\n }\n }\n\n return detected;\n}\n\nexport async function installSkill(\n skillsDir: string,\n skillName: string,\n agent: AgentConfig,\n): Promise<{ success: boolean; error?: string }> {\n const sourceFile = join(skillsDir, skillName, 'SKILL.md');\n const targetDir = join(agent.globalSkillsDir, skillName);\n const targetFile = join(targetDir, 'SKILL.md');\n\n try {\n await mkdir(targetDir, { recursive: true });\n await copyFile(sourceFile, targetFile);\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n}\n\nexport async function runInstallSkill(options: InstallSkillOptions): Promise<void> {\n const home = homedir();\n const agents = createAgents(home);\n const skillsDir = getSkillsDir();\n const skills = await discoverSkills(skillsDir);\n\n if (options.list) {\n console.log(chalk.bold('\\nAvailable Skills:\\n'));\n for (const skill of skills) {\n console.log(` ${chalk.cyan(skill)}`);\n }\n console.log();\n return;\n }\n\n const targetSkills = options.skill ? skills.filter((s) => options.skill!.includes(s)) : skills;\n\n if (targetSkills.length === 0) {\n console.error(chalk.red('No matching skills found.'));\n console.log('Available skills:', skills.join(', '));\n process.exit(1);\n }\n\n const targetAgents = detectAgents(agents, options.agent);\n\n if (targetAgents.length === 0) {\n if (options.agent) {\n console.error(chalk.red('Specified agents not found.'));\n } else {\n console.error(chalk.red('No coding agents detected.'));\n }\n console.log('Supported agents:', Object.keys(agents).join(', '));\n process.exit(1);\n }\n\n console.log(chalk.bold('\\nInstalling skills...\\n'));\n\n const results: Array<{\n skill: string;\n agent: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const skill of targetSkills) {\n for (const agent of targetAgents) {\n const result = await installSkill(skillsDir, skill, agent);\n results.push({\n skill,\n agent: agent.displayName,\n ...result,\n });\n }\n }\n\n const successful = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n if (successful.length > 0) {\n console.log(chalk.green(`✓ Installed ${successful.length} skill(s):\\n`));\n for (const r of successful) {\n console.log(` ${chalk.cyan(r.skill)} → ${chalk.dim(r.agent)}`);\n }\n }\n\n if (failed.length > 0) {\n console.log(chalk.red(`\\n✗ Failed to install ${failed.length}:\\n`));\n for (const r of failed) {\n console.log(` ${r.skill} → ${r.agent}: ${chalk.dim(r.error)}`);\n }\n process.exit(1);\n }\n\n console.log(chalk.green('\\nDone!'));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnD,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,aAAa,EAAE;YACb,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,aAAa;YAC1B,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;YAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAChD;QACD,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;YAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC/C;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,QAAQ;YACrB,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;YAC7C,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAChD;QACD,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO;YACpB,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC;YACnD,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;SACtD;KACF,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB;IACpD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmC,EAAE,MAAiB;IACjF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9C,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,SAAiB,EACjB,KAAkB;IAElB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA4B;IAChE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE/F,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAEzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAKR,EAAE,CAAC;IAER,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,KAAK,EAAE,KAAK,CAAC,WAAW;gBACxB,GAAG,MAAM;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEjD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,UAAU,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;QACzE,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { homedir } from 'os';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport { mkdir, copyFile, readdir } from 'fs/promises';\nimport chalk from 'chalk';\nimport { getPackageRoot } from '../utils/paths.js';\n\nexport interface AgentConfig {\n name: string;\n displayName: string;\n globalSkillsDir: string;\n detect: () => boolean;\n}\n\nexport function createAgents(home: string): Record<string, AgentConfig> {\n return {\n 'claude-code': {\n name: 'claude-code',\n displayName: 'Claude Code',\n globalSkillsDir: join(home, '.claude/skills'),\n detect: () => existsSync(join(home, '.claude')),\n },\n codex: {\n name: 'codex',\n displayName: 'Codex',\n globalSkillsDir: join(home, '.codex/skills'),\n detect: () => existsSync(join(home, '.codex')),\n },\n cursor: {\n name: 'cursor',\n displayName: 'Cursor',\n globalSkillsDir: join(home, '.cursor/skills'),\n detect: () => existsSync(join(home, '.cursor')),\n },\n goose: {\n name: 'goose',\n displayName: 'Goose',\n globalSkillsDir: join(home, '.config/goose/skills'),\n detect: () => existsSync(join(home, '.config/goose')),\n },\n };\n}\n\nexport interface InstallSkillOptions {\n list?: boolean;\n skill?: string[];\n agent?: string[];\n}\n\nexport function getSkillsDir(): string {\n return join(getPackageRoot(import.meta.url), 'skills');\n}\n\nexport async function discoverSkills(skillsDir: string): Promise<string[]> {\n const entries = await readdir(skillsDir, { withFileTypes: true });\n\n return entries.filter((e) => e.isDirectory() && existsSync(join(skillsDir, e.name, 'SKILL.md'))).map((e) => e.name);\n}\n\nexport function detectAgents(agents: Record<string, AgentConfig>, filter?: string[]): AgentConfig[] {\n const detected: AgentConfig[] = [];\n\n for (const [key, config] of Object.entries(agents)) {\n if (filter && !filter.includes(key)) continue;\n if (config.detect()) {\n detected.push(config);\n }\n }\n\n return detected;\n}\n\nexport async function installSkill(\n skillsDir: string,\n skillName: string,\n agent: AgentConfig,\n): Promise<{ success: boolean; error?: string }> {\n const sourceFile = join(skillsDir, skillName, 'SKILL.md');\n const targetDir = join(agent.globalSkillsDir, skillName);\n const targetFile = join(targetDir, 'SKILL.md');\n\n try {\n await mkdir(targetDir, { recursive: true });\n await copyFile(sourceFile, targetFile);\n return { success: true };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n}\n\nexport async function runInstallSkill(options: InstallSkillOptions): Promise<void> {\n const home = homedir();\n const agents = createAgents(home);\n const skillsDir = getSkillsDir();\n const skills = await discoverSkills(skillsDir);\n\n if (options.list) {\n console.log(chalk.bold('\\nAvailable Skills:\\n'));\n for (const skill of skills) {\n console.log(` ${chalk.cyan(skill)}`);\n }\n console.log();\n return;\n }\n\n const targetSkills = options.skill ? skills.filter((s) => options.skill!.includes(s)) : skills;\n\n if (targetSkills.length === 0) {\n console.error(chalk.red('No matching skills found.'));\n console.log('Available skills:', skills.join(', '));\n process.exit(1);\n }\n\n const targetAgents = detectAgents(agents, options.agent);\n\n if (targetAgents.length === 0) {\n if (options.agent) {\n console.error(chalk.red('Specified agents not found.'));\n } else {\n console.error(chalk.red('No coding agents detected.'));\n }\n console.log('Supported agents:', Object.keys(agents).join(', '));\n process.exit(1);\n }\n\n console.log(chalk.bold('\\nInstalling skills...\\n'));\n\n const results: Array<{\n skill: string;\n agent: string;\n success: boolean;\n error?: string;\n }> = [];\n\n for (const skill of targetSkills) {\n for (const agent of targetAgents) {\n const result = await installSkill(skillsDir, skill, agent);\n results.push({\n skill,\n agent: agent.displayName,\n ...result,\n });\n }\n }\n\n const successful = results.filter((r) => r.success);\n const failed = results.filter((r) => !r.success);\n\n if (successful.length > 0) {\n console.log(chalk.green(`✓ Installed ${successful.length} skill(s):\\n`));\n for (const r of successful) {\n console.log(` ${chalk.cyan(r.skill)} → ${chalk.dim(r.agent)}`);\n }\n }\n\n if (failed.length > 0) {\n console.log(chalk.red(`\\n✗ Failed to install ${failed.length}:\\n`));\n for (const r of failed) {\n console.log(` ${r.skill} → ${r.agent}: ${chalk.dim(r.error)}`);\n }\n process.exit(1);\n }\n\n console.log(chalk.green('\\nDone!'));\n}\n"]}
|
package/dist/commands/install.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { runInstaller } from '../run.js';
|
|
2
|
-
import { isNonInteractiveEnvironment } from '../utils/environment.js';
|
|
3
2
|
import clack from '../utils/clack.js';
|
|
4
|
-
import
|
|
3
|
+
import { exitWithError, isJsonMode } from '../utils/output.js';
|
|
5
4
|
/**
|
|
6
5
|
* Handle install command execution.
|
|
7
6
|
*/
|
|
@@ -10,30 +9,18 @@ export async function handleInstall(argv) {
|
|
|
10
9
|
// CI mode validation
|
|
11
10
|
if (options.ci) {
|
|
12
11
|
if (!options.apiKey) {
|
|
13
|
-
|
|
14
|
-
clack.log.error('CI mode requires --api-key (WorkOS API key sk_xxx)');
|
|
15
|
-
process.exit(1);
|
|
12
|
+
exitWithError({ code: 'missing_args', message: 'CI mode requires --api-key (WorkOS API key sk_xxx)' });
|
|
16
13
|
}
|
|
17
14
|
if (!options.clientId) {
|
|
18
|
-
|
|
19
|
-
clack.log.error('CI mode requires --client-id (WorkOS Client ID client_xxx)');
|
|
20
|
-
process.exit(1);
|
|
15
|
+
exitWithError({ code: 'missing_args', message: 'CI mode requires --client-id (WorkOS Client ID client_xxx)' });
|
|
21
16
|
}
|
|
22
17
|
if (!options.installDir) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
exitWithError({
|
|
19
|
+
code: 'missing_args',
|
|
20
|
+
message: 'CI mode requires --install-dir (directory to install WorkOS AuthKit in)',
|
|
21
|
+
});
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
else if (isNonInteractiveEnvironment()) {
|
|
29
|
-
clack.intro(chalk.inverse('WorkOS AuthKit Installer'));
|
|
30
|
-
clack.log.error('This installer requires an interactive terminal (TTY) to run.\n' +
|
|
31
|
-
'It appears you are running in a non-interactive environment.\n' +
|
|
32
|
-
'Please run the installer in an interactive terminal.\n\n' +
|
|
33
|
-
'For CI/CD environments, use --ci mode:\n' +
|
|
34
|
-
' workos install --ci --api-key sk_xxx --client-id client_xxx');
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
24
|
try {
|
|
38
25
|
await runInstaller(options);
|
|
39
26
|
process.exit(0);
|
|
@@ -41,6 +28,12 @@ export async function handleInstall(argv) {
|
|
|
41
28
|
catch (err) {
|
|
42
29
|
const { getLogFilePath } = await import('../utils/debug.js');
|
|
43
30
|
const logPath = getLogFilePath();
|
|
31
|
+
if (isJsonMode()) {
|
|
32
|
+
exitWithError({
|
|
33
|
+
code: 'installer_error',
|
|
34
|
+
message: err instanceof Error ? err.message : 'Unknown error',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
44
37
|
if (options.debug && err instanceof Error && err.stack) {
|
|
45
38
|
console.error(err.stack);
|
|
46
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAG/D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuC;IACzE,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE5B,qBAAqB;IACrB,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4DAA4D,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxB,aAAa,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,yEAAyE;aACnF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QAEjC,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,aAAa,CAAC;gBACZ,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC","sourcesContent":["import { runInstaller } from '../run.js';\nimport type { InstallerArgs } from '../run.js';\nimport clack from '../utils/clack.js';\nimport { exitWithError, isJsonMode } from '../utils/output.js';\nimport type { ArgumentsCamelCase } from 'yargs';\n\n/**\n * Handle install command execution.\n */\nexport async function handleInstall(argv: ArgumentsCamelCase<InstallerArgs>): Promise<void> {\n const options = { ...argv };\n\n // CI mode validation\n if (options.ci) {\n if (!options.apiKey) {\n exitWithError({ code: 'missing_args', message: 'CI mode requires --api-key (WorkOS API key sk_xxx)' });\n }\n if (!options.clientId) {\n exitWithError({ code: 'missing_args', message: 'CI mode requires --client-id (WorkOS Client ID client_xxx)' });\n }\n if (!options.installDir) {\n exitWithError({\n code: 'missing_args',\n message: 'CI mode requires --install-dir (directory to install WorkOS AuthKit in)',\n });\n }\n }\n\n try {\n await runInstaller(options);\n process.exit(0);\n } catch (err) {\n const { getLogFilePath } = await import('../utils/debug.js');\n const logPath = getLogFilePath();\n\n if (isJsonMode()) {\n exitWithError({\n code: 'installer_error',\n message: err instanceof Error ? err.message : 'Unknown error',\n });\n }\n\n if (options.debug && err instanceof Error && err.stack) {\n console.error(err.stack);\n }\n if (logPath) {\n clack.log.info(`Debug logs: ${logPath}`);\n }\n process.exit(1);\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface InvitationListOptions {
|
|
2
|
+
org?: string;
|
|
3
|
+
email?: string;
|
|
4
|
+
limit?: number;
|
|
5
|
+
before?: string;
|
|
6
|
+
after?: string;
|
|
7
|
+
order?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runInvitationList(options: InvitationListOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
10
|
+
export declare function runInvitationGet(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
11
|
+
export interface InvitationSendOptions {
|
|
12
|
+
email: string;
|
|
13
|
+
org?: string;
|
|
14
|
+
role?: string;
|
|
15
|
+
expiresInDays?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function runInvitationSend(options: InvitationSendOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
18
|
+
export declare function runInvitationRevoke(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
19
|
+
export declare function runInvitationResend(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createWorkOSClient } from '../lib/workos-client.js';
|
|
3
|
+
import { formatTable } from '../utils/table.js';
|
|
4
|
+
import { outputSuccess, outputJson, isJsonMode } from '../utils/output.js';
|
|
5
|
+
import { createApiErrorHandler } from '../lib/api-error-handler.js';
|
|
6
|
+
const handleApiError = createApiErrorHandler('Invitation');
|
|
7
|
+
export async function runInvitationList(options, apiKey, baseUrl) {
|
|
8
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
9
|
+
try {
|
|
10
|
+
const result = await client.sdk.userManagement.listInvitations({
|
|
11
|
+
...(options.org && { organizationId: options.org }),
|
|
12
|
+
...(options.email && { email: options.email }),
|
|
13
|
+
limit: options.limit,
|
|
14
|
+
before: options.before,
|
|
15
|
+
after: options.after,
|
|
16
|
+
order: options.order,
|
|
17
|
+
});
|
|
18
|
+
if (isJsonMode()) {
|
|
19
|
+
outputJson({ data: result.data, listMetadata: result.listMetadata });
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (result.data.length === 0) {
|
|
23
|
+
console.log('No invitations found.');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const rows = result.data.map((inv) => [
|
|
27
|
+
inv.id,
|
|
28
|
+
inv.email,
|
|
29
|
+
inv.organizationId ?? chalk.dim('-'),
|
|
30
|
+
inv.state,
|
|
31
|
+
inv.expiresAt,
|
|
32
|
+
]);
|
|
33
|
+
console.log(formatTable([{ header: 'ID' }, { header: 'Email' }, { header: 'Org ID' }, { header: 'State' }, { header: 'Expires At' }], rows));
|
|
34
|
+
const { before, after } = result.listMetadata;
|
|
35
|
+
if (before && after) {
|
|
36
|
+
console.log(chalk.dim(`Before: ${before} After: ${after}`));
|
|
37
|
+
}
|
|
38
|
+
else if (before) {
|
|
39
|
+
console.log(chalk.dim(`Before: ${before}`));
|
|
40
|
+
}
|
|
41
|
+
else if (after) {
|
|
42
|
+
console.log(chalk.dim(`After: ${after}`));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
handleApiError(error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export async function runInvitationGet(id, apiKey, baseUrl) {
|
|
50
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
51
|
+
try {
|
|
52
|
+
const invitation = await client.sdk.userManagement.getInvitation(id);
|
|
53
|
+
outputJson(invitation);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
handleApiError(error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export async function runInvitationSend(options, apiKey, baseUrl) {
|
|
60
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
61
|
+
try {
|
|
62
|
+
const invitation = await client.sdk.userManagement.sendInvitation({
|
|
63
|
+
email: options.email,
|
|
64
|
+
...(options.org && { organizationId: options.org }),
|
|
65
|
+
...(options.role && { roleSlug: options.role }),
|
|
66
|
+
...(options.expiresInDays !== undefined && { expiresInDays: options.expiresInDays }),
|
|
67
|
+
});
|
|
68
|
+
outputSuccess('Sent invitation', invitation);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
handleApiError(error);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export async function runInvitationRevoke(id, apiKey, baseUrl) {
|
|
75
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
76
|
+
try {
|
|
77
|
+
const invitation = await client.sdk.userManagement.revokeInvitation(id);
|
|
78
|
+
outputSuccess('Revoked invitation', invitation);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
handleApiError(error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export async function runInvitationResend(id, apiKey, baseUrl) {
|
|
85
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
86
|
+
try {
|
|
87
|
+
const invitation = await client.sdk.userManagement.resendInvitation(id);
|
|
88
|
+
outputSuccess('Resent invitation', invitation);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
handleApiError(error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=invitation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invitation.js","sourceRoot":"","sources":["../../src/commands/invitation.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { createWorkOSClient } from '../lib/workos-client.js';\nimport { formatTable } from '../utils/table.js';\nimport { outputSuccess, outputJson, isJsonMode } from '../utils/output.js';\nimport { createApiErrorHandler } from '../lib/api-error-handler.js';\n\nconst handleApiError = createApiErrorHandler('Invitation');\n\nexport interface InvitationListOptions {\n org?: string;\n email?: string;\n limit?: number;\n before?: string;\n after?: string;\n order?: string;\n}\n\nexport async function runInvitationList(\n options: InvitationListOptions,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const result = await client.sdk.userManagement.listInvitations({\n ...(options.org && { organizationId: options.org }),\n ...(options.email && { email: options.email }),\n limit: options.limit,\n before: options.before,\n after: options.after,\n order: options.order as 'asc' | 'desc' | undefined,\n });\n\n if (isJsonMode()) {\n outputJson({ data: result.data, listMetadata: result.listMetadata });\n return;\n }\n\n if (result.data.length === 0) {\n console.log('No invitations found.');\n return;\n }\n\n const rows = result.data.map((inv) => [\n inv.id,\n inv.email,\n inv.organizationId ?? chalk.dim('-'),\n inv.state,\n inv.expiresAt,\n ]);\n\n console.log(\n formatTable(\n [{ header: 'ID' }, { header: 'Email' }, { header: 'Org ID' }, { header: 'State' }, { header: 'Expires At' }],\n rows,\n ),\n );\n\n const { before, after } = result.listMetadata;\n if (before && after) {\n console.log(chalk.dim(`Before: ${before} After: ${after}`));\n } else if (before) {\n console.log(chalk.dim(`Before: ${before}`));\n } else if (after) {\n console.log(chalk.dim(`After: ${after}`));\n }\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runInvitationGet(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.getInvitation(id);\n outputJson(invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport interface InvitationSendOptions {\n email: string;\n org?: string;\n role?: string;\n expiresInDays?: number;\n}\n\nexport async function runInvitationSend(\n options: InvitationSendOptions,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.sendInvitation({\n email: options.email,\n ...(options.org && { organizationId: options.org }),\n ...(options.role && { roleSlug: options.role }),\n ...(options.expiresInDays !== undefined && { expiresInDays: options.expiresInDays }),\n });\n outputSuccess('Sent invitation', invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runInvitationRevoke(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.revokeInvitation(id);\n outputSuccess('Revoked invitation', invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runInvitationResend(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const invitation = await client.sdk.userManagement.resendInvitation(id);\n outputSuccess('Resent invitation', invitation);\n } catch (error) {\n handleApiError(error);\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface MembershipListOptions {
|
|
2
|
+
org?: string;
|
|
3
|
+
user?: string;
|
|
4
|
+
limit?: number;
|
|
5
|
+
before?: string;
|
|
6
|
+
after?: string;
|
|
7
|
+
order?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function runMembershipList(options: MembershipListOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
10
|
+
export declare function runMembershipGet(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
11
|
+
export interface MembershipCreateOptions {
|
|
12
|
+
org: string;
|
|
13
|
+
user: string;
|
|
14
|
+
role?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function runMembershipCreate(options: MembershipCreateOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
17
|
+
export declare function runMembershipUpdate(id: string, role: string | undefined, apiKey: string, baseUrl?: string): Promise<void>;
|
|
18
|
+
export declare function runMembershipDelete(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
19
|
+
export declare function runMembershipDeactivate(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
20
|
+
export declare function runMembershipReactivate(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createWorkOSClient } from '../lib/workos-client.js';
|
|
3
|
+
import { formatTable } from '../utils/table.js';
|
|
4
|
+
import { outputSuccess, outputJson, isJsonMode, exitWithError } from '../utils/output.js';
|
|
5
|
+
import { createApiErrorHandler } from '../lib/api-error-handler.js';
|
|
6
|
+
const handleApiError = createApiErrorHandler('Membership');
|
|
7
|
+
export async function runMembershipList(options, apiKey, baseUrl) {
|
|
8
|
+
if (!options.org && !options.user) {
|
|
9
|
+
exitWithError({
|
|
10
|
+
code: 'missing_args',
|
|
11
|
+
message: 'At least one of --org or --user is required.',
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
15
|
+
try {
|
|
16
|
+
const result = await client.sdk.userManagement.listOrganizationMemberships({
|
|
17
|
+
...(options.org && { organizationId: options.org }),
|
|
18
|
+
...(options.user && { userId: options.user }),
|
|
19
|
+
limit: options.limit,
|
|
20
|
+
before: options.before,
|
|
21
|
+
after: options.after,
|
|
22
|
+
order: options.order,
|
|
23
|
+
});
|
|
24
|
+
if (isJsonMode()) {
|
|
25
|
+
outputJson({ data: result.data, listMetadata: result.listMetadata });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (result.data.length === 0) {
|
|
29
|
+
console.log('No memberships found.');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const rows = result.data.map((m) => [
|
|
33
|
+
m.id,
|
|
34
|
+
m.userId,
|
|
35
|
+
m.organizationId,
|
|
36
|
+
m.role?.slug ?? chalk.dim('-'),
|
|
37
|
+
m.status,
|
|
38
|
+
m.createdAt,
|
|
39
|
+
]);
|
|
40
|
+
console.log(formatTable([
|
|
41
|
+
{ header: 'ID' },
|
|
42
|
+
{ header: 'User ID' },
|
|
43
|
+
{ header: 'Org ID' },
|
|
44
|
+
{ header: 'Role' },
|
|
45
|
+
{ header: 'Status' },
|
|
46
|
+
{ header: 'Created' },
|
|
47
|
+
], rows));
|
|
48
|
+
const { before, after } = result.listMetadata;
|
|
49
|
+
if (before && after) {
|
|
50
|
+
console.log(chalk.dim(`Before: ${before} After: ${after}`));
|
|
51
|
+
}
|
|
52
|
+
else if (before) {
|
|
53
|
+
console.log(chalk.dim(`Before: ${before}`));
|
|
54
|
+
}
|
|
55
|
+
else if (after) {
|
|
56
|
+
console.log(chalk.dim(`After: ${after}`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
handleApiError(error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export async function runMembershipGet(id, apiKey, baseUrl) {
|
|
64
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
65
|
+
try {
|
|
66
|
+
const membership = await client.sdk.userManagement.getOrganizationMembership(id);
|
|
67
|
+
outputJson(membership);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
handleApiError(error);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export async function runMembershipCreate(options, apiKey, baseUrl) {
|
|
74
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
75
|
+
try {
|
|
76
|
+
const membership = await client.sdk.userManagement.createOrganizationMembership({
|
|
77
|
+
organizationId: options.org,
|
|
78
|
+
userId: options.user,
|
|
79
|
+
...(options.role && { roleSlug: options.role }),
|
|
80
|
+
});
|
|
81
|
+
outputSuccess('Created membership', membership);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
handleApiError(error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export async function runMembershipUpdate(id, role, apiKey, baseUrl) {
|
|
88
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
89
|
+
try {
|
|
90
|
+
const membership = await client.sdk.userManagement.updateOrganizationMembership(id, {
|
|
91
|
+
...(role && { roleSlug: role }),
|
|
92
|
+
});
|
|
93
|
+
outputSuccess('Updated membership', membership);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
handleApiError(error);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export async function runMembershipDelete(id, apiKey, baseUrl) {
|
|
100
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
101
|
+
try {
|
|
102
|
+
await client.sdk.userManagement.deleteOrganizationMembership(id);
|
|
103
|
+
outputSuccess('Deleted membership', { id });
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
handleApiError(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export async function runMembershipDeactivate(id, apiKey, baseUrl) {
|
|
110
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
111
|
+
try {
|
|
112
|
+
const membership = await client.sdk.userManagement.deactivateOrganizationMembership(id);
|
|
113
|
+
outputSuccess('Deactivated membership', membership);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
handleApiError(error);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export async function runMembershipReactivate(id, apiKey, baseUrl) {
|
|
120
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
121
|
+
try {
|
|
122
|
+
const membership = await client.sdk.userManagement.reactivateOrganizationMembership(id);
|
|
123
|
+
outputSuccess('Reactivated membership', membership);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
handleApiError(error);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=membership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membership.js","sourceRoot":"","sources":["../../src/commands/membership.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { createWorkOSClient } from '../lib/workos-client.js';\nimport { formatTable } from '../utils/table.js';\nimport { outputSuccess, outputJson, isJsonMode, exitWithError } from '../utils/output.js';\nimport { createApiErrorHandler } from '../lib/api-error-handler.js';\n\nconst handleApiError = createApiErrorHandler('Membership');\n\nexport interface MembershipListOptions {\n org?: string;\n user?: string;\n limit?: number;\n before?: string;\n after?: string;\n order?: string;\n}\n\nexport async function runMembershipList(\n options: MembershipListOptions,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n if (!options.org && !options.user) {\n exitWithError({\n code: 'missing_args',\n message: 'At least one of --org or --user is required.',\n });\n }\n\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const result = await client.sdk.userManagement.listOrganizationMemberships({\n ...(options.org && { organizationId: options.org }),\n ...(options.user && { userId: options.user }),\n limit: options.limit,\n before: options.before,\n after: options.after,\n order: options.order as 'asc' | 'desc' | undefined,\n } as Parameters<typeof client.sdk.userManagement.listOrganizationMemberships>[0]);\n\n if (isJsonMode()) {\n outputJson({ data: result.data, listMetadata: result.listMetadata });\n return;\n }\n\n if (result.data.length === 0) {\n console.log('No memberships found.');\n return;\n }\n\n const rows = result.data.map((m) => [\n m.id,\n m.userId,\n m.organizationId,\n m.role?.slug ?? chalk.dim('-'),\n m.status,\n m.createdAt,\n ]);\n\n console.log(\n formatTable(\n [\n { header: 'ID' },\n { header: 'User ID' },\n { header: 'Org ID' },\n { header: 'Role' },\n { header: 'Status' },\n { header: 'Created' },\n ],\n rows,\n ),\n );\n\n const { before, after } = result.listMetadata;\n if (before && after) {\n console.log(chalk.dim(`Before: ${before} After: ${after}`));\n } else if (before) {\n console.log(chalk.dim(`Before: ${before}`));\n } else if (after) {\n console.log(chalk.dim(`After: ${after}`));\n }\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runMembershipGet(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const membership = await client.sdk.userManagement.getOrganizationMembership(id);\n outputJson(membership);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport interface MembershipCreateOptions {\n org: string;\n user: string;\n role?: string;\n}\n\nexport async function runMembershipCreate(\n options: MembershipCreateOptions,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const membership = await client.sdk.userManagement.createOrganizationMembership({\n organizationId: options.org,\n userId: options.user,\n ...(options.role && { roleSlug: options.role }),\n });\n outputSuccess('Created membership', membership);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runMembershipUpdate(\n id: string,\n role: string | undefined,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const membership = await client.sdk.userManagement.updateOrganizationMembership(id, {\n ...(role && { roleSlug: role }),\n });\n outputSuccess('Updated membership', membership);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runMembershipDelete(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n await client.sdk.userManagement.deleteOrganizationMembership(id);\n outputSuccess('Deleted membership', { id });\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runMembershipDeactivate(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const membership = await client.sdk.userManagement.deactivateOrganizationMembership(id);\n outputSuccess('Deactivated membership', membership);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runMembershipReactivate(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const membership = await client.sdk.userManagement.reactivateOrganizationMembership(id);\n outputSuccess('Reactivated membership', membership);\n } catch (error) {\n handleApiError(error);\n }\n}\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { createWorkOSClient } from '../lib/workos-client.js';
|
|
3
|
+
import { outputJson, isJsonMode } from '../utils/output.js';
|
|
4
|
+
import { createApiErrorHandler } from '../lib/api-error-handler.js';
|
|
5
|
+
const handleApiError = createApiErrorHandler('OnboardUser');
|
|
6
|
+
export async function runOnboardUser(options, apiKey, baseUrl) {
|
|
7
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
8
|
+
const summary = {};
|
|
9
|
+
try {
|
|
10
|
+
if (!isJsonMode())
|
|
11
|
+
console.log(chalk.bold(`Onboarding user: ${options.email}`));
|
|
12
|
+
// 1. Send invitation
|
|
13
|
+
const invitation = await client.sdk.userManagement.sendInvitation({
|
|
14
|
+
email: options.email,
|
|
15
|
+
organizationId: options.org,
|
|
16
|
+
...(options.role && { roleSlug: options.role }),
|
|
17
|
+
});
|
|
18
|
+
summary.invitationId = invitation.id;
|
|
19
|
+
if (!isJsonMode())
|
|
20
|
+
console.log(chalk.green(` Sent invitation: ${invitation.id}`));
|
|
21
|
+
// 2. Optional: wait for acceptance
|
|
22
|
+
if (options.wait) {
|
|
23
|
+
if (!isJsonMode())
|
|
24
|
+
console.log(chalk.dim(' Waiting for invitation acceptance...'));
|
|
25
|
+
const maxAttempts = 60;
|
|
26
|
+
const pollInterval = 5000;
|
|
27
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
28
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
29
|
+
const status = await client.sdk.userManagement.getInvitation(invitation.id);
|
|
30
|
+
if (status.state === 'accepted') {
|
|
31
|
+
summary.invitationAccepted = true;
|
|
32
|
+
if (!isJsonMode())
|
|
33
|
+
console.log(chalk.green(' Invitation accepted!'));
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
if (status.state === 'revoked' || status.state === 'expired') {
|
|
37
|
+
summary.invitationAccepted = false;
|
|
38
|
+
if (!isJsonMode())
|
|
39
|
+
console.log(chalk.yellow(` Invitation ${status.state}.`));
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
if (!isJsonMode() && i % 6 === 0)
|
|
43
|
+
console.log(chalk.dim(` Still waiting... (${status.state})`));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// 3. Print summary
|
|
47
|
+
if (isJsonMode()) {
|
|
48
|
+
outputJson({ status: 'ok', ...summary });
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log(chalk.bold('\nOnboarding summary:'));
|
|
52
|
+
console.log(` Invitation: ${invitation.id} (${invitation.state})`);
|
|
53
|
+
if (options.role)
|
|
54
|
+
console.log(` Role: ${options.role}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
handleApiError(error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=onboard-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard-user.js","sourceRoot":"","sources":["../../src/commands/onboard-user.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport { createWorkOSClient } from '../lib/workos-client.js';\nimport { outputJson, isJsonMode } from '../utils/output.js';\nimport { createApiErrorHandler } from '../lib/api-error-handler.js';\n\nconst handleApiError = createApiErrorHandler('OnboardUser');\n\nexport interface OnboardUserOptions {\n email: string;\n org: string;\n role?: string;\n wait?: boolean;\n}\n\nexport async function runOnboardUser(options: OnboardUserOptions, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n const summary: Record<string, unknown> = {};\n\n try {\n if (!isJsonMode()) console.log(chalk.bold(`Onboarding user: ${options.email}`));\n\n // 1. Send invitation\n const invitation = await client.sdk.userManagement.sendInvitation({\n email: options.email,\n organizationId: options.org,\n ...(options.role && { roleSlug: options.role }),\n });\n summary.invitationId = invitation.id;\n if (!isJsonMode()) console.log(chalk.green(` Sent invitation: ${invitation.id}`));\n\n // 2. Optional: wait for acceptance\n if (options.wait) {\n if (!isJsonMode()) console.log(chalk.dim(' Waiting for invitation acceptance...'));\n\n const maxAttempts = 60;\n const pollInterval = 5000;\n\n for (let i = 0; i < maxAttempts; i++) {\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n const status = await client.sdk.userManagement.getInvitation(invitation.id);\n\n if (status.state === 'accepted') {\n summary.invitationAccepted = true;\n if (!isJsonMode()) console.log(chalk.green(' Invitation accepted!'));\n break;\n }\n\n if (status.state === 'revoked' || status.state === 'expired') {\n summary.invitationAccepted = false;\n if (!isJsonMode()) console.log(chalk.yellow(` Invitation ${status.state}.`));\n break;\n }\n\n if (!isJsonMode() && i % 6 === 0) console.log(chalk.dim(` Still waiting... (${status.state})`));\n }\n }\n\n // 3. Print summary\n if (isJsonMode()) {\n outputJson({ status: 'ok', ...summary });\n } else {\n console.log(chalk.bold('\\nOnboarding summary:'));\n console.log(` Invitation: ${invitation.id} (${invitation.state})`);\n if (options.role) console.log(` Role: ${options.role}`);\n }\n } catch (error) {\n handleApiError(error);\n }\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function runOrgDomainGet(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
2
|
+
export declare function runOrgDomainCreate(domain: string, organizationId: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
3
|
+
export declare function runOrgDomainVerify(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
4
|
+
export declare function runOrgDomainDelete(id: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createWorkOSClient } from '../lib/workos-client.js';
|
|
2
|
+
import { outputSuccess, outputJson } from '../utils/output.js';
|
|
3
|
+
import { createApiErrorHandler } from '../lib/api-error-handler.js';
|
|
4
|
+
const handleApiError = createApiErrorHandler('OrganizationDomain');
|
|
5
|
+
export async function runOrgDomainGet(id, apiKey, baseUrl) {
|
|
6
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
7
|
+
try {
|
|
8
|
+
const result = await client.sdk.organizationDomains.get(id);
|
|
9
|
+
outputJson(result);
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
handleApiError(error);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function runOrgDomainCreate(domain, organizationId, apiKey, baseUrl) {
|
|
16
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
17
|
+
try {
|
|
18
|
+
const result = await client.sdk.organizationDomains.create({ domain, organizationId });
|
|
19
|
+
outputSuccess('Created organization domain', result);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
handleApiError(error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function runOrgDomainVerify(id, apiKey, baseUrl) {
|
|
26
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
27
|
+
try {
|
|
28
|
+
const result = await client.sdk.organizationDomains.verify(id);
|
|
29
|
+
outputSuccess('Verified organization domain', result);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
handleApiError(error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function runOrgDomainDelete(id, apiKey, baseUrl) {
|
|
36
|
+
const client = createWorkOSClient(apiKey, baseUrl);
|
|
37
|
+
try {
|
|
38
|
+
await client.sdk.organizationDomains.delete(id);
|
|
39
|
+
outputSuccess('Deleted organization domain', { id });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
handleApiError(error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=org-domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-domain.js","sourceRoot":"","sources":["../../src/commands/org-domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,cAAc,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;AAEnE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAU,EAAE,MAAc,EAAE,OAAgB;IAChF,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,UAAU,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,cAAsB,EACtB,MAAc,EACd,OAAgB;IAEhB,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACvF,aAAa,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAU,EAAE,MAAc,EAAE,OAAgB;IACnF,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/D,aAAa,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAU,EAAE,MAAc,EAAE,OAAgB;IACnF,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,6BAA6B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC","sourcesContent":["import { createWorkOSClient } from '../lib/workos-client.js';\nimport { outputSuccess, outputJson } from '../utils/output.js';\nimport { createApiErrorHandler } from '../lib/api-error-handler.js';\n\nconst handleApiError = createApiErrorHandler('OrganizationDomain');\n\nexport async function runOrgDomainGet(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const result = await client.sdk.organizationDomains.get(id);\n outputJson(result);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runOrgDomainCreate(\n domain: string,\n organizationId: string,\n apiKey: string,\n baseUrl?: string,\n): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const result = await client.sdk.organizationDomains.create({ domain, organizationId });\n outputSuccess('Created organization domain', result);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runOrgDomainVerify(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n const result = await client.sdk.organizationDomains.verify(id);\n outputSuccess('Verified organization domain', result);\n } catch (error) {\n handleApiError(error);\n }\n}\n\nexport async function runOrgDomainDelete(id: string, apiKey: string, baseUrl?: string): Promise<void> {\n const client = createWorkOSClient(apiKey, baseUrl);\n\n try {\n await client.sdk.organizationDomains.delete(id);\n outputSuccess('Deleted organization domain', { id });\n } catch (error) {\n handleApiError(error);\n }\n}\n"]}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
domain: string;
|
|
3
|
-
state: string;
|
|
4
|
-
}
|
|
1
|
+
import type { DomainData } from '@workos-inc/node';
|
|
5
2
|
export declare function parseDomainArgs(args: string[]): DomainData[];
|
|
6
3
|
export declare function runOrgCreate(name: string, domainArgs: string[], apiKey: string, baseUrl?: string): Promise<void>;
|
|
7
4
|
export declare function runOrgUpdate(orgId: string, name: string, apiKey: string, domain?: string, state?: string, baseUrl?: string): Promise<void>;
|
|
@@ -15,4 +12,3 @@ export interface OrgListOptions {
|
|
|
15
12
|
}
|
|
16
13
|
export declare function runOrgList(options: OrgListOptions, apiKey: string, baseUrl?: string): Promise<void>;
|
|
17
14
|
export declare function runOrgDelete(orgId: string, apiKey: string, baseUrl?: string): Promise<void>;
|
|
18
|
-
export {};
|