@intercom/cli 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -32,20 +32,22 @@ intercom setup --company-name "Acme" --articles-from ./docs
32
32
  | Command | Description |
33
33
  |---|---|
34
34
  | `intercom api <endpoint>` | Raw API access (like `gh api`) |
35
- | `intercom auth login` | Authenticate with token |
36
- | `intercom auth logout` | Remove stored credentials |
37
- | `intercom auth status` | Show current auth state |
38
- | `intercom auth bootstrap` | Bootstrap OAuth via Developer Hub |
35
+ | `intercom auth login\|logout\|status\|list\|switch` | Manage authentication |
36
+ | `intercom auth bootstrap\|signup\|verify-email` | Workspace provisioning |
39
37
  | `intercom me` | Show current admin and workspace |
40
38
  | `intercom articles list\|get\|create\|update\|delete` | Manage help center articles |
41
- | `intercom contacts list\|get\|create\|update\|delete` | Manage contacts |
42
- | `intercom conversations list\|get\|reply` | Manage conversations |
39
+ | `intercom contacts list\|get\|create\|update\|delete\|search` | Manage contacts |
40
+ | `intercom conversations list\|get\|reply\|search` | Manage conversations |
43
41
  | `intercom help-center list\|get\|create` | Manage help center collections |
44
42
  | `intercom messenger get\|update\|snippet` | Configure Messenger |
45
- | `intercom fin manifest` | Show Fin SDK manifest |
46
- | `intercom fin enable` | Enable Fin AI Agent |
47
- | `intercom fin guidance list\|get` | Manage Fin guidance |
43
+ | `intercom fin manifest\|enable\|download` | Fin AI Agent core |
44
+ | `intercom fin procedures list\|get\|validate\|test\|publish` | Fin procedures |
45
+ | `intercom fin guidance\|attributes\|audiences\|workflows\|simulations` | Fin SDK resources |
46
+ | `intercom fin data-connectors list\|get` | Fin data connectors |
48
47
  | `intercom setup` | Orchestrate full workspace setup |
48
+ | `intercom config get\|set\|list` | Manage CLI configuration |
49
+ | `intercom pricing` | Show current Intercom pricing |
50
+ | `intercom completion bash\|zsh\|fish` | Generate shell completions |
49
51
 
50
52
  ## Global Flags
51
53
 
@@ -57,6 +59,9 @@ intercom setup --company-name "Acme" --articles-from ./docs
57
59
  | `--verbose` | Show HTTP request/response details |
58
60
  | `--no-retry` | Disable automatic rate limit retry |
59
61
  | `--timeout <seconds>` | Request timeout in seconds |
62
+ | `--agent` | Force machine-readable output (JSON/NDJSON) |
63
+ | `--human` | Force human-readable output even when piped |
64
+ | `--wide` | Show all columns with wider truncation |
60
65
  | `--version` | Print CLI version |
61
66
 
62
67
  ## Agent / Pipe Mode
@@ -112,7 +117,7 @@ git clone git@github.com:intercom/cli.git
112
117
  cd cli
113
118
  npm ci
114
119
  npm run build # Build to dist/
115
- npm test # Run tests (~9s)
120
+ npm test # Run tests (~5s)
116
121
  npm run lint # TypeScript typecheck
117
122
  npm run dev # Watch mode
118
123
 
@@ -106,4 +106,4 @@ export {
106
106
  formatJson,
107
107
  applyJq
108
108
  };
109
- //# sourceMappingURL=chunk-QEXGKXTU.js.map
109
+ //# sourceMappingURL=chunk-Y4JK5AHH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/output/json.ts"],"sourcesContent":["export interface IntercomError {\n code: string;\n message: string;\n status: number;\n retry_after?: number;\n}\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public readonly exitCode: number = 1,\n public readonly error?: IntercomError,\n ) {\n super(message);\n this.name = \"CLIError\";\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string) {\n super(message, 2);\n }\n}\n\nexport class RateLimitError extends CLIError {\n constructor(\n message: string,\n public readonly retryAfter: number,\n ) {\n super(message, 3);\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(message: string) {\n super(message, 4);\n }\n}\n\nexport class PermissionError extends CLIError {\n constructor(message: string) {\n super(message, 5);\n }\n}\n\nexport class TimeoutError extends CLIError {\n constructor(message: string) {\n super(message, 6);\n }\n}\n\nexport type AuthType = \"oauth\" | \"api_key\";\n\n/**\n * Detect whether a token is an OAuth token or an API key.\n * Eagle OAuth tokens are base64-encoded and decode to \"tok:...\" format.\n */\nexport function detectAuthType(token: string): AuthType {\n try {\n const decoded = Buffer.from(token, \"base64\").toString(\"utf-8\");\n if (decoded.startsWith(\"tok:\")) {\n return \"oauth\";\n }\n } catch {\n // Not valid base64 — assume API key\n }\n return \"api_key\";\n}\n\nexport interface StoredCredential {\n token: string;\n auth_type: AuthType;\n app_id: string;\n workspace_name?: string;\n expires_at?: string;\n}\n\nexport interface WorkspaceConfig {\n app_id: string;\n name: string;\n}\n\nexport interface Config {\n workspaces: Record<string, WorkspaceConfig>;\n default?: string;\n timeout?: number;\n}\n\nexport interface PaginatedResponse<T> {\n type: \"list\";\n data: T[];\n pages?: {\n next?: string;\n page: number;\n per_page: number;\n total_pages: number;\n };\n}\n","import { CLIError } from \"../types.js\";\n\nexport function formatJson(data: unknown): string {\n return JSON.stringify(data, null, 2);\n}\n\nexport function applyJq(data: unknown, expr: string): unknown {\n if (expr === \".\") return data;\n\n // Must start with \".\"\n if (!expr.startsWith(\".\")) {\n throw new CLIError(\n `Unsupported jq expression: \"${expr}\". Supported: \".\", \".field\", \".field.nested\", \".field[].nested\"`,\n );\n }\n\n // Reject pipes, functions, parens, etc.\n if (/[|(){},;]/.test(expr)) {\n throw new CLIError(\n `Unsupported jq expression: \"${expr}\". Supported: \".\", \".field\", \".field.nested\", \".field[].nested\"`,\n );\n }\n\n const parts = expr.replace(/^\\.\\s*/, \"\").split(/\\./).filter(Boolean);\n\n for (const part of parts) {\n if (!/^\\w+(\\[\\])?$/.test(part)) {\n throw new CLIError(\n `Unsupported jq expression: \"${expr}\". Supported: \".\", \".field\", \".field.nested\", \".field[].nested\"`,\n );\n }\n }\n let current: unknown = data;\n\n for (const part of parts) {\n const arrayMatch = part.match(/^(\\w+)\\[\\]$/);\n if (arrayMatch) {\n const key = arrayMatch[1];\n if (current && typeof current === \"object\" && key in current) {\n const arr = (current as Record<string, unknown>)[key];\n if (!Array.isArray(arr)) return undefined;\n current = arr;\n } else {\n return undefined;\n }\n } else if (Array.isArray(current)) {\n current = current.map((item) =>\n item && typeof item === \"object\"\n ? (item as Record<string, unknown>)[part]\n : undefined,\n );\n } else if (current && typeof current === \"object\") {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n\n return current;\n}\n"],"mappings":";;;AAOO,IAAM,WAAN,cAAuB,MAAM;AAAA,EAClC,YACE,SACgB,WAAmB,GACnB,OAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,YAAN,cAAwB,SAAS;AAAA,EACtC,YAAY,SAAiB;AAC3B,UAAM,SAAS,CAAC;AAAA,EAClB;AACF;AAEO,IAAM,iBAAN,cAA6B,SAAS;AAAA,EAC3C,YACE,SACgB,YAChB;AACA,UAAM,SAAS,CAAC;AAFA;AAAA,EAGlB;AACF;AAEO,IAAM,gBAAN,cAA4B,SAAS;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,SAAS,CAAC;AAAA,EAClB;AACF;AAEO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAC5C,YAAY,SAAiB;AAC3B,UAAM,SAAS,CAAC;AAAA,EAClB;AACF;AAEO,IAAM,eAAN,cAA2B,SAAS;AAAA,EACzC,YAAY,SAAiB;AAC3B,UAAM,SAAS,CAAC;AAAA,EAClB;AACF;AAQO,SAAS,eAAe,OAAyB;AACtD,MAAI;AACF,UAAM,UAAU,OAAO,KAAK,OAAO,QAAQ,EAAE,SAAS,OAAO;AAC7D,QAAI,QAAQ,WAAW,MAAM,GAAG;AAC9B,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO;AACT;;;ACjEO,SAAS,WAAW,MAAuB;AAChD,SAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACrC;AAEO,SAAS,QAAQ,MAAe,MAAuB;AAC5D,MAAI,SAAS,IAAK,QAAO;AAGzB,MAAI,CAAC,KAAK,WAAW,GAAG,GAAG;AACzB,UAAM,IAAI;AAAA,MACR,+BAA+B,IAAI;AAAA,IACrC;AAAA,EACF;AAGA,MAAI,YAAY,KAAK,IAAI,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,+BAA+B,IAAI;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,QAAQ,KAAK,QAAQ,UAAU,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO;AAEnE,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,eAAe,KAAK,IAAI,GAAG;AAC9B,YAAM,IAAI;AAAA,QACR,+BAA+B,IAAI;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACA,MAAI,UAAmB;AAEvB,aAAW,QAAQ,OAAO;AACxB,UAAM,aAAa,KAAK,MAAM,aAAa;AAC3C,QAAI,YAAY;AACd,YAAM,MAAM,WAAW,CAAC;AACxB,UAAI,WAAW,OAAO,YAAY,YAAY,OAAO,SAAS;AAC5D,cAAM,MAAO,QAAoC,GAAG;AACpD,YAAI,CAAC,MAAM,QAAQ,GAAG,EAAG,QAAO;AAChC,kBAAU;AAAA,MACZ,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF,WAAW,MAAM,QAAQ,OAAO,GAAG;AACjC,gBAAU,QAAQ;AAAA,QAAI,CAAC,SACrB,QAAQ,OAAO,SAAS,WACnB,KAAiC,IAAI,IACtC;AAAA,MACN;AAAA,IACF,WAAW,WAAW,OAAO,YAAY,UAAU;AACjD,gBAAW,QAAoC,IAAI;AAAA,IACrD,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}